使用C#委托实例化对象

时间:2020-10-30 15:05:11

标签: c#

我偶然发现了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; }
    }

    
}

2 个答案:

答案 0 :(得分:1)

这是选项/配置空间中的常见模式。两种方法都有优点和缺点

  • DoStuffOneWay:传递委托可以使基础系统实例化实际对象,但它可以使基础系统重复应用您的选项

  • DoStuffOtherWay:允许您从任意系统中传递选项对象,并完全控制这些对象的生命周期。

答案 1 :(得分:1)

在您的DoStuffOneWay中,您正在传递一个委托-它包含一个方法引用。此Action<Options> configOptions由C#编译器转换为方法。因此,基本上,您是将方法传递到DoStuffOneWay方法中。

另一方面,在DoStuffOtherWay中,您将Options类型参数传递给该方法。它只是一个方法参数。

那是两者之间的区别。基本上,两种方法是出于两个不同的目的

相关问题