class my_class
{
public int add_1(int a, int b) {return a + b;}
public func<int, int, int> add_2 = (a, b) => {return a + b;}
}
add_1是一个函数,而add_2是一个委托(delegate)。但是,在这种情况下,代表可以扮演类似的角色。
由于先例和语言的设计,C#方法的默认选择应该是函数。
但是,两种方法都各有利弊,因此我列出了 list 。这两种方法是否还有其他优点或缺点?
常规方法的优点。
“委托(delegate)类型字段”方法的优点。
请不要投票关闭,这已经发生,并且重新打开了。即使您认为委托(delegate)方法与已建立的编码风格有冲突,或者您不喜欢委托(delegate)方法有很多实际用途,或者您不喜欢委托(delegate)的优势,这也是一个有效的问题。
最佳答案
首先,对我来说,关于这个设计决定的“高阶位”是,我永远不会在公共(public) Realm /方法上做这种事情。至少我会使用一个属性,甚至可能不会使用。
对于私有(private)字段,我经常使用这种模式,通常是这样的:
class C
{
private Func<int, int> ActualFunction = (int y)=>{ ... };
private Func<int, int> Function = ActualFunction.Memoize();
现在,我可以非常轻松地测试不同记忆策略的性能特征,而无需完全更改ActualFunction的文本。
“方法是委托(delegate)人类型的字段”策略的另一个优点是,您可以实现与我们“融入”该语言的技术不同的代码共享技术。委托(delegate)类型的 protected 字段本质上是一种虚拟方法,但更灵活。派生类可以用所需的任何类替换它,并且您已经模拟了常规的虚方法。但是您可以建立自定义继承机制;例如,如果您确实喜欢原型(prototype)继承,则可以约定:如果该字段为null,则改为调用某个原型(prototype)实例上的方法,依此类推。
委托(delegate)方式的方法的一个主要缺点是,当然,重载不再起作用。字段名称必须唯一;方法仅在签名上必须唯一。另外,您不会像获取通用方法那样获得通用字段,因此方法类型推断会停止工作。
关于c# - 与经典功能相比,委派成员还有更多优点或缺点?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8028059/