C#笔记整理
里氏转换:
1.子类可以赋值给父类:如果有一个地方需要一个父类作为参数,我们可以给一个子类代替;
2.如果父类中装的是子类对象,那么可以将这个父类强转为子类对象;
foreach循环:
foreach(var item in Txt)
{
Console.Write(item);
}
item:代表集合里的每一项;in后面的:要遍历的目标集合;
装箱:值类型转换为引用类型;
拆箱:引用类型转换为值类型;
前提:两者要有继承关系;
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
委托:是一种数据类型,像类一样(可以声明委托类型变量)
定义委托类型,注意定义委托时是否有返回值和参数,关键是看委托里面存放的那个方法有没有返回值和参数,要保持一致。
系统自带泛型委托:
1.Action 无参数无返回值
扩展方法:Action<int> 参数是int类型,无返回值,只要是Action都是无返回值的
2.Func<int> 表示没有参数 返回值是int;
Func<int,string> 表示的是参数是int,返回值是string。
只要是Func<>里面有多个类型,最后一个永远是返回值。
委托和事件的区别:
委托:可以用等号(=)来赋值,可以在外部进行调用,是一种数据类型。
事件:不可以用等号(=)来赋值,不可以在外部进行调用,不是数据类型,它修饰的是一个对象。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
比如 0x0A ,若没有2,就只会输出0xA
假设有两个数10和26,正常情况十六进制显示0xA、0x1A,这样看起来不整齐,为了好看,可以指定"X2",这样显示出来就是:0x0A、0x1A
在使用静态构造函数的时候应该注意几点:
1、静态构造函数既没有访问修饰符,也没有参数。因为是.NET调用的,所以像public和private等修饰符就没有意义了。
2、是在创建第一个类实例或任何静态成员被引用时,.NET将自动调用静态构造函数来初始化类,也就是说我们无法直接调用静态构造函数,也就无法控制什么时候执行静态构造函数了。
3、一个类只能有一个静态构造函数。
4、无参数的构造函数可以与静态构造函数共存。尽管参数列表相同,但一个属于类,一个属于实例,所以不会冲突。
5、最多只运行一次。
6、静态构造函数不可以被继承。
7、如果没有写静态构造函数,而类中包含带有初始值设定的静态成员,那么编译器会自动生成默认的静态构造函数。