与CC++指针相似的C#代表元及事件触发

与CC++指针相似的C#代表元及事件触发,第1张

与CC++指针相似的C#代表元及事件触发,第2张

代表元素在C#中是一个复杂的概念,C#中的代表元素非常类似于C/C++中的函数指针。使用代表元素可以封装代表元素内部方法的引用,然后使用代表元素引用的方法。

它的一个特点是不需要知道被引用的方法属于哪个类对象,只要函数的参数个数和返回类型与元对象一致即可。这可能比较抽象。下面举几个简单的例子,希望能给初学者一些基础知识。


//定义一个返回值为字符串的无参数委托
注意,该委托只能引用对象中返回值为字符串的无参数方法
delegatestringdelegate();
public class my class
{
public string say Hello()
{
返回“Hello the world!”;
}

}
公共类TestMyClass
{
公共静态void Main(string[]args)
{
my class my class 1 = new my class();
my delegate my delegate 1 =新的MyDelegate(myClass1。say hello);
//这里用myDelegate1代替对象myClass1的SayHello方法
system . console . writeline(my delegate 1());
//输出结果是hello the world!
并调用myClass1。say hello();相同效果
}
}

如果委托只有这个功能,那就没多大用了。委托的另一个非常有用的功能是定义复合委托对象。只能组合相同类型的委托+可以定义复合委托对象-从复合委托中移除委托对象:

委托void MyDelegate(字符串s);
public class my class
{
public void say hello(string who)
{
System。Console.WriteLine(谁+“你好!”);
}
public void say goodbye(string who)
{
系统。Console.WriteLine( who+“再见!”);
}

}

公共类TestMyClass
{
公共静态void Main(string[]args)
{
my class my class 1 = new my class();
MyDelegate myDelegate,myDelegate1。
my delegate =新的MyDelegate(myClass1。say hello);
my delegate 1 =新的MyDelegate(myClass1。say goodbye);
my delegate+= my delegate 1;
//以这种方式调用myDeletage等效于调用
myClass1。同时SayHello和my class 1 . say goodbye
my delegate(" love . net ");
//执行结果输出到love.net Hello!love.net再见!
}
}

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 与CC++指针相似的C#代表元及事件触发

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情