初始化C#自动

这个问题在这里已经有了答案:

  • 你如何给C#自动属性一个默认值? 21个答案

  • 更新 - 下面的答案是在C#6出现之前编写的。 在C#6中,您可以编写:

    public class Foo
    {
        public string Bar { get; set; } = "bar";
    }
    

    您也可以编写只读的自动实现的属性,这些属性只能在构造函数中写入(但也可以赋予默认的初始值:

    public class Foo
    {
        public string Bar { get; }
    
        public Foo(string bar)
        {
            Bar = bar;
        }
    }
    

    不幸的是,现在没有办法做到这一点。 您必须在构造函数中设置该值。 (使用构造函数链可以帮助避免重复。)

    自动实现的属性现在很方便,但肯定会更好。 我不觉得自己需要这种初始化,就像只能在构造函数中设置的只读自动实现的属性一样,并且只能通过只读字段来支持。

    这并没有发生,直到包括C#5,但是正在为C#6计划 - 无论是允许在声明点初始化,还是允许在构造函数体中初始化只读自动实现的属性。


    你可以通过你的类的构造函数来完成它:

    public class foo {
      public foo(){
        Bar = "bar";
      }
      public string Bar {get;set;}
    }
    

    如果你有另一个构造函数(也就是一个需要参数的构造函数)或者一堆构造函数,你总是可以拥有这个构造函数(称为构造函数链):

    public class foo {
      private foo(){
        Bar = "bar";
        Baz = "baz";
      }
      public foo(int something) : this(){
        //do specialized initialization here
        Baz = string.Format("{0}Baz", something);
      }
      public string Bar {get; set;}
      public string Baz {get; set;}
    }
    

    如果您始终将调用链接到默认构造函数,则可以在此处设置所有默认属性初始化。 链接时,链接的构造函数将在调用构造函数之前调用,以便更专业的构造函数可以根据需要设置不同的默认值。


    在C#6.0中将是可能的:

    public int Y { get; } = 2;
    
    链接地址: http://www.djcxy.com/p/51345.html

    上一篇: Initializing C# auto

    下一篇: C# 3.0 auto