我偶然发现了DoStuffOneWay
,这让我有些困惑。以下这两种方法的功能区别是什么?使用委托方法似乎很流行,但是对我来说似乎有点冗长?
并且在位置修改了选项?什么?而且它可以防止您将物体穿过多层?
using System;
namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
DoStuffOneWay(o =>
{
o.Foo = "foo";
o.Bar = "bar";
});
DoStuffOtherWay(new Options()
{
Foo = "foo",
Bar = "bar"
});
}
private static void DoStuffOneWay(Action<Options> configOptions)
{
var options = new Options();
configOptions(options);
Console.WriteLine(options);
}
private static void DoStuffOtherWay(Options configOptions)
{
Console.WriteLine(options);
}
}
public class Options
{
public string Foo { get; set; }
public string Bar { get; set; }
}
}
答案 0 :(得分:1)
这是选项/配置空间中的常见模式。两种方法都有优点和缺点
DoStuffOneWay
:传递委托可以使基础系统实例化实际对象,但它可以使基础系统重复应用您的选项
DoStuffOtherWay
:允许您从任意系统中传递选项对象,并完全控制这些对象的生命周期。
答案 1 :(得分:1)
在您的DoStuffOneWay
中,您正在传递一个委托-它包含一个方法引用。此Action<Options> configOptions
由C#编译器转换为方法。因此,基本上,您是将方法传递到DoStuffOneWay
方法中。
另一方面,在DoStuffOtherWay
中,您将Options
类型参数传递给该方法。它只是一个方法参数。
那是两者之间的区别。基本上,两种方法是出于两个不同的目的