P.B*_*key 23 .net c# language-agnostic oop
在C#语言规范中,它明确指出:
委托类似于在其他一些语言中找到的函数指针的概念,但与函数指针不同,委托是面向对象的,类型安全的.
我理解委托需要比指针更灵活,因为.NET会移动内存.这是我所知道的唯一区别,但我不确定这会如何将代表转变为OO概念......?
是什么让函数指针不面向对象?指针和函数指针是否等效?
Eri*_*ert 32
嗯,维基百科说"面向对象"意味着使用"数据抽象,封装,消息传递,模块化,多态和继承等功能".缺乏更好的定义,让我们继续.
函数指针不包含数据,它们不封装实现细节,它们既不发送也不接收消息,它们不是模块化的,它们通常不以多态方式使用(尽管我认为它们在理论上可以是协变的和逆变的.它们的返回和形式参数类型,因为委托现在在C#4中,并且它们不参与继承层次结构.他们不是自我描述的; 你不能问一个函数指针的类型,因为它没有.
相比之下,代表们捕获数据 - 他们抓住接收器.它们支持消息传递,您可以通过调用其ToString或GetType或Invoke或BeginInvoke方法来"告知"委托,以告诉它执行某些操作,并使用结果"返回"消息.如果您选择,则可以将委托类型限制为某些可访问性域.它们是具有元数据的自描述对象,并且在运行时知道它们自己的类型.他们可以与其他代表合并.它们可以多态地用作System.MulticastDelegate或System.Delegate,它们是从中继承的类型.并且它们可以多态地使用,因为在C#4委托类型中它们的返回和参数类型可能是协变的和逆变的.
归档时间: |
|
查看次数: |
2069 次 |
最近记录: |