方法编写模式

alw*_*ing 2 c# delegates

我最近注意到以下代码基本上定义了一个类方法

public Func<string, string> SampleMethod = inputParam =>
{
    return inputParam.ToUpper();
};
Run Code Online (Sandbox Code Playgroud)

这与以老式方式进行相同

public string SampleMethod(string inputParam ) 
{
    return inputParam.ToUpper();
}
Run Code Online (Sandbox Code Playgroud)

我的问题 - 为什么我更喜欢第一个?我的眼睛可能更训练,更快地理解第二种风格.我发现它类似于SMS术语和普通旧英语之间的区别.

Meh*_*ari 6

这两件事情根本不同.前者是委托类型的字段,而后者实际上是一种方法.我能想到的最小的区别是你可以在运行时动态修改第一个,并在第二个修复时为其分配另一个方法引用.

如果你的目的是为C#中的一个类编写一个简单的方法,你通常不应该喜欢第一个而不是第二个.

一个让第一个非常脆弱的例子:

var c = new SomeClass();
c.SampleMethod = inputParam => inputParam.ToLower();
c.DoSomeTaskThatReliesOnSampleMethodReturningAnUpperCaseString();
c.SampleMethod = null;
c.DoSomeTaskThatCallsSampleMethod(); // NullReferenceException
Run Code Online (Sandbox Code Playgroud)

这种编程风格在Javascript等语言中很常见,其中一个对象基本上是一个建立在简单字典上的动态生物.