C#笔记②
一、实例构造器(instance constructor)
Yuan yuan=new Yuan();
就是实例一个对象时候所做的操作
构造器是一个没有返回值,连void都没有的方法
点击查看代码
public Yuan()
{
}
但他可以带入参数
Yuan yuan=new Yuan(2);
点击查看代码
int x;
public Yuan(int a)
{
this.x=a;
}
构造器会执行以下操作:
- 对类字段进行初始化,若构造器中有赋值,则初始化为那个值的量
- 对类型进行切割,放在堆中
ctor快捷创建实例构造器
二、Stack Frame
谁调用谁压数进栈,若是Main调用了某带有参数的方法,则把对应的参数类型对应空间压进栈中,归Main管。
返回值一般在CPU的寄存器中。
三、new也是一种操作符
new的功能:
在内存中创建一个实例并调用构造器,若左边有赋值语句则将内存编码赋予变量名所对应的内存空间中。
(后面可接初始化器)
new xx() { }
使用new时要小心紧耦合,如果这个实例出问题了,那么整个Main都无法执行。
四、匿名函数
- 使用new的匿名函数
点击查看代码
var x=new{Name="Ok",Age=19};
- 使用delegate(一般用于委托,不用于匿名)的匿名函数
点击查看代码
x+=delegate(double a,double b)
{
return a+b;
};
- 使用拉姆达(Lambda)表达式
点击查看代码
x+=(a,b)=>{return a+b;};
//属性+=(形参)=>方法
五、checked操作符
一般检测error,搭配try、catch出现。
点击查看代码
uint x=uint.MaxValue;
try
{
uint y=checked(x+1);
System.Console.WriteLine(y);
}
catch (OverflowException ex)
{
System.Console.WriteLine("Overflow");
}
也可以写成
点击查看代码
uint x=uint.MaxValue;
checked
{
try
{
uint y=x+1;
System.Console.WriteLine(y);
}
catch (OverflowException ex)
{
System.Console.WriteLine("Overflow");
}
编译器默认unchecked
六、default取默认值操作符与sizeof取字节操作符
default用于取默认值时,结构体一般为0,引用类型为null,枚举为索引为0的那个数据。
sizeof一般只能用于取结构体数据类型字节,若要取类的字节,要在Unsafe中取
七、~按位取反操作符
八、二进制转化操作符
-
&对为取与
-
|对位取或
-
^按位异或(不一样为真)
九、?与??null值合并操作符
一般值类型一般不能为空
但可以引入可空类型 <泛型>
Nullable<int> x =null;
相当于
int ? x=null;
?用在对象后面相当于,若对象不为空则返回某成员,空则返回null
stu=stu?.ID;
null值合并??操作符
如果x为null,则y赋值为1
int ?x=null;
int y=x??1; //如果x为null,则返回1,否则返回x
十、隐式转换(implicit)与显式转换(explicit)
隐式转换(implicit):
- 不丢失精度(小类型数据到大类型数据)
(long x=int y) - 子类向父类的转换
(父类 xx=子类 yy) - 装箱

显式转换(explicit):
- 有可能失去精度,即cast(大类型数据到小类型数据)
(Type)x
-
拆箱
-
使用Convert类
-
Tostring
点击查看代码
int x=100;
int y=100;
int z=x+y;
string b=z.ToString();
System.Console.WriteLine(b);
-
.Parse方法
解析传进来的数据类型
double x=double.Parse("200.5"); -
.TryParse方法
自定义:
显式转换
class Program
{
static void Main(string[] args)
{
Stone stone=new Stone();
stone.Age=5000;
Monkey sunWuKong=(Monkey)stone;
System.Console.WriteLine(sunWuKong.Age);
}
class Stone
{
public int Age;
public static explicit operator Monkey(Stone stone)
{
Monkey m=new Monkey();
m.Age=stone.Age/500;
return m;
}
}
class Monkey
{
public int Age;
}
}
隐式转换
class Program
{
static void Main(string[] args)
{
Stone stone=new Stone();
stone.Age=5000;
Monkey sunWuKong=stone;
System.Console.WriteLine(sunWuKong.Age);
}
class Stone
{
public int Age;
public static implicit operator Monkey(Stone stone)
{
Monkey m=new Monkey();
m.Age=stone.Age/500;
return m;
}
}
class Monkey
{
public int Age;
}
}

浙公网安备 33010602011771号