• 基础一


    . 程序集和命名空间的概念

    (1)bin文件引用的是程序集,using 引用的是命名空间

    (2)一个程序集中包含很多命名空间(一个命名空间也可以包含很多程序集,但通常不这么用),命名空间的名字通常是程序集的名字或者 程序集.文件夹如下图:

    我们说的程序集其实就是类库

     2. 常使用的快捷键

    ctrl+M ,ctrl+O 收缩代码,只对后台代码有效

    ctrl+k+d ,对齐代码

    f12 ,代码定位

    f1,在线的MSDN帮助

    prop 按两下tab,快速打属性字段

    3. 调试窗口:运行时才有效

    (1),即时窗口

    (2),添加监视

     (3)快捷键F12可快速跳转到定义,Ctrl 加 - (减号)可跳转回原来的位置。

    4. 类型转换

    (1)值类型之间的转换

    隐式转换:小类型转成大类型,是隐式转换: 比如 int 转成 float ,int类型四个字节,float 类型8字节    

    显式转换:大类型转换为小类型,强制转换,比如 float a=13.5 ,int b; b=(int)a; // 13

    (2)字符串与值类型转换:

    int a=10 ; string b=a.toString();

    string c=“12.4”; int a=float.parse(c);

    ps: a+c 会自动转换为字符串

    (3) 万能转换器进行不同类型的转换: Convert.ToXXX(Object value)

    double a=Convert.ToDouble("20.15");

    DateTime dateTime=Convert.ToDateTime("2012-03-15");

    int c=Convert.ToInt32(a); // 20 ,注意转换成整数时,采用四舍五入

    PS:拆箱装箱:将值类型转换成 object ,叫装箱

    装箱:CLR需要做额外的工作,把堆栈上的值类型移动到堆上

    拆箱:装箱操作的反操作,把堆上的数据移动到堆栈上,并返回其值

    所以装箱拆箱的操作意味着一系列的堆栈操作,无疑是性能的消耗,我们应该避免装箱,拆箱的操作

     var i = 123;      //System.Int32
     //对 i 装箱(隐式)
      object obj = i;
    //对 obj 进行拆箱(显式)
       i = (int)obj;
    // 使用泛型,避免使用object类型
    ArrayList arraylist=new ArrayList();
    arrayList.add(0);
    arrayList.add("1");

    List<int> list=new List<int>();
    list.add(0);
    list.add(1);

    ps:类型转换,为了避免抛出异常,可以使用is 和as 进行转换,is 只是返回true 和false,as 如何转换失败,会使用null

    (4)浮点类型

    float在转成double的时候出现了精度的丢失问题,所以尽量不要使用float ,而使用double

     double a = 0.3;
     double b;
    b = a * 1.345;   // 结果 0.4035

    float a=0.3F;
    double b;
    b = a * 1.345; // 结果 0.403500016033649

    (5) 值类型是存储在堆栈上的,常用的值类型是 整数型,浮点型,布尔型,struct,枚举类型

    (6) decimal (金额)

    decimal myMoney = 99.9m;  必须要加m,否则发生编译
    double x = (double)myMoney;
    myMoney = (decimal)x;
    decimal拥有比float更高的精度,最高能处理到小数点后面的28位。适合用在财务类等对数字精确度要求比较高的场合。

     5. 逻辑运算符

    && : a && b  ,逻辑与 ,a和b都为true 结果为true ,注意如果a 为false ,b就不会运算

    ||: a || b ,逻辑或,如果a为true ,b就不会在运算

    应用 : var a= app || {}

    !:逻辑非

    6. 条件运算符if ..else 和 switch

    if...else 用于区间判断,else 与离他最近的if是一对

    switch 等值判断

    7. 循环

    平面的输出(二维输出),是两个 for循环,外层控制行,内层控制列

    ======================字符串和数组========================

    8. String 类型常用的方法

    (1) indexOf (): 查找索引 ,string a=“qwert”; a.indexOf("w"); //1

    (2)length :求字符串的长度

    (3)字符串比较: == 或者 Equals(),两则没有区别,但是后者显得更加专业些

    (4)字符串截取: SubString(int startIndex,int length)

    string email=“xiaowang@qq.com”;

    string name=email.SubString(0,email.IndexOf("@"));

    (5) 使用占位符完成字符串的拼接,占位符格式可以是货币,小数点位数等

    string newstr=string.Format("我的名字{0},我的年龄是{1},我有{2:C3}",name,20,2000)  // Y2000.000

    (6)Trim(),ToUpper,ToLower(),LastIndexOf()

    (7)StringBuilder 类,定义可变字符串:如果字符串频繁的操作,使用它效率高

    (8) string StuName=string.Empty;

    9 .数组的常用方法

    (1),C#数组声明的时候要指定长度

    (2),数组在计算机内存中存储是连续的一块内存,变量定义的是首地址,使用下标来访问数据

    (3),int[] a=new int[5]; int b={1,2,3,4,5,6}; int b=new int[]{1,2,3,4,5,6}

    (4) ,字符串补充: string.join("_",nameArray);   "qr,qr,t,wt,y".split(',');

    (5) 数组的遍历: for 或者 foreach(int key in Array)

    ps: struct 不常用,作了解即可

    enum: Icon = (Icon)Enum.Parse(typeof(Icon), dt.Rows[i]["F_Icon"].ToString());

    11 .运算

    2^10=1024 =1K
    1024K=1M
    1024M=1G
    1G=2^10*2^10*2^10=2^30

    12. 托管堆和非托管堆

    托管堆,CG会自动回收,而非托管堆,CG不会自动回收,需要手动调用Dispose()方法释放内存

    非托管的堆有:文件流,数据库连接等


    13. String 和 Byte[] 对象之间如何转换

    bit: 表示一个二进位(数据库中表示布尔类型)

    Byte:字节 1Byte=8bit

    编码:数字信息和现实信息转换机制,一种编码通常定义了一种字符集和转换原则,常用的编码是 utf-8 ,gb2312,unicode

    字节数组和字符串的转换必然涉及到某种编码方式,不同的编码方式会产生不同的转换结果,在C#中,可以使用 System.Text.Encoding来管理常用的编码

    class Program
        {
            static void Main(string[] args)
            {
                string s = "我是字符串,I am a string!";
                // 字节数组 -> 字符串
                Byte[] utf8 = StringToByte(s, Encoding.UTF8);
                Byte[] gb2312 = StringToByte(s, Encoding.GetEncoding("GB2312"));
                Byte[] unicode = StringToByte(s, Encoding.Unicode);
    
                Console.WriteLine(utf8.Length);
                Console.WriteLine(gb2312.Length);
                Console.WriteLine(unicode.Length);
                // 字符串 -> 字符数组
                Console.WriteLine(ByteToString(utf8, Encoding.UTF8));
                Console.WriteLine(ByteToString(gb2312, Encoding.GetEncoding("GB2312")));
                Console.WriteLine(ByteToString(unicode, Encoding.Unicode));
    
                Console.ReadKey();
            }
    
            // 字符串 -> 字节数组
            static Byte[] StringToByte(string str, Encoding encoding)
            {
                if (string.IsNullOrEmpty(str))
                {
                    return null;
                }
                return encoding.GetBytes(str);
            }
    
            // 字节数组 -> 字符串
            static string ByteToString(Byte[] bytes, Encoding encoding)
            {
                if (bytes == null || bytes.Length <= 0)
                {
                    return string.Empty;
                }
    
                return encoding.GetString(bytes);
            }
        }

     上述代码的运行结果如下图所示:

      我们也可以从上图中看出,不同的编码方式产生的字节数组的长度各不相同

    13.BASE64 编码的作用,以及在C#中对其支持

    和传统的编码不同,BASE64编码的设计致力于混肴那些8位字节的数据流(解决网络传输中明码问题),在网络传输,邮件系统中被广泛应用,BASE64不属于加密,但是它却能把明码变成很难识别的一种形式。

     在.NET中,BASE64编码的应用也很多,例如在ASP.NET WebForm中,默认为我们生成了一个ViewState来保持状态,如下图所示:

    viewstate

      这里的ViewState其实就是服务器在返回给浏览器前进行了一次BASE64编码,我们可以通过一些解码工具进行反BASE64编码查看其中的奥秘:

    Decoder

        那么,问题来了?在.NET中开发中,怎样来进行BASE64的编码和解码呢,.NET基类库中提供了一个Convert类,其中有两个静态方法提供了BASE64的编码和解码,但要注意的是:Convert类型在转换失败时会直接抛出异常,我们需要在开发中注意对潜在异常的处理(比如使用is或as来进行高效的类型转换)。下面的代码展示了其用法:

    class Program
        {
            static void Main(string[] args)
            {
                string test = "abcde ";
                // 生成UTF8字节数组
                byte[] bytes = Encoding.UTF8.GetBytes(test);
                // 转换成Base64字符串
                string base64 = BytesToBase64(bytes);
                Console.WriteLine(base64);
                // 转换回UTF8字节数组
                bytes = Base64ToBytes(base64);
                Console.WriteLine(Encoding.UTF8.GetString(bytes));
    
                Console.ReadKey();
            }
    
            // Bytes to Base64
            static string BytesToBase64(byte[] bytes)
            {
                try
                {
                    return Convert.ToBase64String(bytes);
                }
                catch
                {
                    return null;
                }
            }
    
            // Base64 to Bytes
            static Byte[] Base64ToBytes(string base64)
            {
                try
                {
                    return Convert.FromBase64String(base64);
                }
                catch
                {
                    return null;
                }
            }
        }

      上面代码的执行结果如下图所示:

      

     ps: 字符串转换成BASE64,先把字符串转换成字节,然后再把字节转换为BASE64 字符串

  • 相关阅读:
    HDU 1548 A strange lift (Dijkstra)
    HDU 1217 Arbitrage (Floyd)
    HDU 1385 Minimum Transport Cost (Dijstra 最短路)
    考研总结 2016-12-31 20:10 219人阅读 评论(21) 收藏
    归并排序 2016-12-30 20:17 208人阅读 评论(21) 收藏
    docker安装 2016-11-06 19:14 299人阅读 评论(31) 收藏
    Docker初步了解 2016-10-30 20:46 279人阅读 评论(31) 收藏
    [自考]感想 2016-10-23 20:28 261人阅读 评论(32) 收藏
    [自考]C++中一些特殊用法 2016-10-16 22:12 318人阅读 评论(30) 收藏
    Fitnesse批量读取变量信息,并保存到用例执行上下文中
  • 原文地址:https://www.cnblogs.com/haigui-zx/p/8410327.html
Copyright © 2020-2023  润新知