快速过完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
- 通过静态构造函数初始化静态数据成员
- ///描述方法
- 结构体在栈中,并且含有自带的无参构造函数
- 结构体将省出存放引用的空间