1. 委托
(1)C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针。委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。
(2)Delegate的Invoke(委托同步调用)、BeginInvoke(委托异步调用)。BeginInvoke是在主线程之外,另起了一个线程来运行其所需的代码。
(3)BeginInvoke方法触发你的异步方法,它和你想要执行的异步方法有相同的参数。另外还有两个可选参数,第一个是AsyncCallback委托是异步完成的回调方法。第二个是用户自定义对象,该对象将传递到回调方法中。BeginInvoke立即返回并且不等待完成异步的调用(继续执行该下面的代码,不需要等待)。BeginInvoke返回IAsyncResult接口,可用于检测异步调用的过程。
无论你怎么使用,都必须调用EndInvoke方法结束你的异步调用。
https://www.cnblogs.com/wolf-sun/p/5675791.html
(4)委托的多播
- 委托对象可使用 “+” 运算符进行合并。一个合并委托调用它所合并的两个委托。只有相同类型的委托可被合并。"-" 运算符可用于从合并的委托中移除组件委托。
2. 事件
(1)在类的内部声明事件,首先必须声明该事件的委托类型。例如:
public delegate void BoilerLogHandler(string status);
(2)声明事件本身,使用 event 关键字:
public event BoilerLogHandler BoilerEventLog;
3. 引用
(1)ref作为参数的函数在调用前,实参必须赋初始值。否则编译器将提示:使用了未赋值的局部变量;
out作为参数的函数在调用前,实参可以不赋初始值。
(2)在被调用函数内,out引入的参数在返回前至少赋值一次,否则编译器将提示:使用了未赋值的out参数;
在被调用函数内,ref引入的参数在返回前不必为其赋初值。
4. 属性访问器
(1)当我们不想让外界随意访问该私有变量时,可以使用属性来访问,语法为:
public <返回类型(要与被访问变量的类型相同)> <属性名(不能与被访问变量同名)>
{
get{ return <被访问变量>;}
set{ <被访问变量> = value;}
}
(2)如果只定义get方法,那么这个相应变量就是“只读”的;如果只定义set方法,那么相应变量就是“只写”的。
(3)好处在于可以通过属性来控制对员变量的读写,防止对成员变量的非法赋值等。
5. 静态构造函数
(1)由.net 框架在合适的时机调用(在
类被实例化
或者静态成员被调用
的时候),没有修饰符修饰(public,private),不能使用参数,不能实例化实例变量,静态构造函数只会被执行一次。
(2)无参数的静态构造函数和无参数的构造函数是可以并存的。因为他们一个属于类级别,一个属于实例级别,并不冲突。
(3)如果我们在类中定义了静态变量,但是又没有定义静态构造函数,那么框架也会帮助我们来生成一个静态构造函数来让框架自身来调用。
6.创建某个类型的第一个实例时,所进行的操作顺序
1.静态变量设置为0
2.执行静态变量初始化器
3.执行基类的静态构造函数
4.执行静态构造函数
5.实例变量设置为0
6.执行实例变量初始化器
7.执行基类中合适的实例构造函数
8.执行实例构造函数