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;}
}
Run Code Online (Sandbox Code Playgroud)
add_1是一个函数,而add_2是一个委托.然而,在这种情况下,代表们可以填补类似的角色.
由于先例和语言的设计,C#方法的默认选择应该是函数.
然而,这两种方法都有利有弊,所以我已经制作了一份清单.这两种方法都有任何优点或缺点吗?
传统方法的优点.
- 更常规
- 函数的外部用户看到命名参数 - 对于add_2语法arg_n和类型一般不够信息.
- 使用intellisense-ty Minitech可以更好地工作
- 适用于反射 - ty Minitech
- 与继承合作 - Eric Lippert
- 有一个"这个" - ty CodeInChaos
- 更低的开销,速度和内存 - ty Minitech和CodeInChaos
- 在更改和使用函数方面,不需要考虑public\private. - ty CodeInChaos
- 动态性较低,允许在编译时不知道的少 - ty CodeInChaos
"委托类型字段"方法的优点.
- 更一致,而不是成员函数和数据成员,它只是数据成员.
- 可以向外看,表现得像变量.
- 将它存放在容器中效果很好.
- 多个类可以使用相同的函数,就好像它是每个成员函数一样,这将非常通用,简洁并且具有良好的代码重用.
- 直接在任何地方使用,例如作为本地功能.
- 可能在垃圾收集传递时效果很好.
- 更动态,在编译时必须知道的更少,例如,可能存在在运行时配置对象行为的函数.
- 就像封装它的代码一样,可以组合并重新编写,msdn.microsoft.com/en-us/library/ms173175%28v = vs.80%29.aspx
- 该函数的外部用户可以看到未命名的参数 - 有时这是有用的,尽管能够命名它们会很好.
- 可以更紧凑,在这个简单的例子中,例如可以删除返回,如果有一个参数,也可以删除括号.
- 滚动你自己的行为,如继承 - ty …