.NET之C#

快速过完C#,适合有Java或者C++基础的,主要关注和其它语言的差异

  • 内置类型
       sbyte a; //1
      byte b; //1

      short c; //2
      ushort d; //2

      int e; //4
      uint f; //4

      long g; //8 
      ulong h; //8

      float i; //4
      double j; //8

      decimal k; //16

      char l; //2

      string m;

      bool n; //1

  • 命名规则:以小写字母开头,除第一个单词之外,首字母大写
  • C#占位符:
string myName = "treblez";
string myAddress = "dongbeidaxue";
char p = 't';
string str = string.Format("I am {0},come from {1}", myName, myAddress);
  • 内存分析发现,C# string类型是一个指针,指向存储变量的位置,但是并非一一对应
  • 占位符的特殊用法:
Console.WriteLine("{0:c}", 5);//用金钱格式输出
Console.WriteLine("{0:d2}", 5);//位数填充
Console.WriteLine("{0:f1}", 1.26);//以指定位数输出
Console.WriteLine("{0:p0}", 0.1);//以百分数输出

输出如下:
¥5.00
05
1.3
10%

  • 转义符:/
  • CLS:公共语言规范,规定了.NET平台上运行语言所必需支持的规范,用以避免不同的语言特性产生的错误,实现语言间相互操作
  • CLR:公共语言运行库,程序运行环境,负责内存分配,垃圾收集,安全检查等
  • foreach:参考java的foreach
  • var :参考js的var和c++的auto
  • 参数数组语法糖:
//参数数组 将变量置换为所需要的类型
  private static int Add(params int[] arr)
  {
      return 0;
  }
  • 一个有趣的差异:对于c++来说,string被放置在栈中,但是c#和java则是放置在堆中
  • 不要对C#做内存分析,虽然对于C++是好的习惯,但是C#并非直接操作内存
  • object关键字 仍然是栈引用堆
object o1 = 1;
object o2 = o1;
o1 = 2;
Console.WriteLine(o2);

输出1

  • 引用参数 ref 关键字,标识函数参数,按照引用传递;传递之前必须赋值
  • 输出参数 out 关键字,标识函数参数,按照引用传递;在函数中必须为参数赋值;传递之前可以不赋值
  • GC回收垃圾占用性能,所以尽量少产生垃圾
  • 装箱:将值类型隐式转换为object类型
    拆箱:装箱的反过程
    装箱比较消耗性能
int a = 1;
object b = a;
int c = (int)b;
  • 使用StringBuilder来进行字符串拼接,避过字符串不可变性产生的内存浪费
  • 永远使用StringBuilder,如果您需要频繁使用字符串的话
  • prop+tab tab
  • 通过静态构造函数初始化静态数据成员
  • ///描述方法
  • 结构体在栈中,并且含有自带的无参构造函数
  • 结构体将省出存放引用的空间
原文地址:https://www.cnblogs.com/treblez/p/13493616.html