上节课学了第十二章Delegates & Events, 我想简单说说我的收获。Delegate,即委托,用于将事件与其动作和方法关联起来,有点类似于C++中的函数指针。举个简单的创建delegate的例子:
delegate int Sample(int x, int y) 这里定义了delegate方法、Sample的返回值和签名。
class Class2
{
public int method( int x, int y )
{ return x*y; }
}
class Class1 这里是调用delegate的构造方法生成mySample实体
{
static void Main(string[] args)
{
Class2 instance = new Class2();
Sample mySample
= new Sample(instance.method);
int result = mySample( 2, 3 );
Console.WriteLine( result );
}
}
这是老师ppt中的重点内容,以下是我下课的实践:
class Program
{
static void OtherClassMethod(){
Console.WriteLine("Delegate an other class's method");
}
static void Main(string[] args)
{
var test = new TestDelegate();
test.delegateMethod = new TestDelegate.DelegateMethod(test.NonStaticMethod);
test.delegateMethod += new TestDelegate.DelegateMethod(TestDelegate.StaticMethod);
test.delegateMethod += Program.OtherClassMethod;
test.RunDelegateMethods();
}
}
class TestDelegate
{
public delegate void DelegateMethod(); //声明了一个Delegate Type
public DelegateMethod delegateMethod; //声明了一个Delegate对象
public static void StaticMethod()
{
Console.WriteLine("Delegate a static method");
}
public void NonStaticMethod()
{
Console.WriteLine("Delegate a non-static method");
}
public void RunDelegateMethods()
{
if(delegateMethod != null){
Console.WriteLine("---------");
delegateMethod.Invoke();
Console.WriteLine("---------");
}
}
}
我自己感觉其与C++中函数指针还是有一定的区别的,主要有三个方面:
1)一个delegate对象一次可以搭载多个方法(methods),而不是一次一个。
2)一个delegate对象所搭载的方法并不需要属于同一个类别。
3)与函数指针不同,委托是面向对象,类型安全并且安全的。
以上是我这次学习的内容,希望老师和大神们多多指教,