首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >初始化C#自动属性

初始化C#自动属性
EN

Stack Overflow用户
提问于 2008-10-03 22:59:53
回答 3查看 183.6K关注 0票数 212

我习惯于编写这样的类:

代码语言:javascript
复制
public class foo {
  private string mBar = "bar";
  public string Bar {
    get { return mBar; }
    set { mBar = value; }
  }
  //... other methods, no constructor ...
}

将Bar转换为auto-property似乎既方便又简洁,但我如何才能在不添加构造函数并将初始化放入其中的情况下保留初始化?

代码语言:javascript
复制
public class foo2theRevengeOfFoo {
  //private string mBar = "bar";
  public string Bar { get; set; }
  //... other methods, no constructor ...
  //behavior has changed.
}

您可以看到,添加构造函数并不符合我应该从auto-properties中获得的工作量节省。

这样的事情对我来说更有意义:

代码语言:javascript
复制
public string Bar { get; set; } = "bar";
EN

回答 3

Stack Overflow用户

发布于 2008-10-03 23:06:09

你可以通过你的类的构造函数来实现:

代码语言:javascript
复制
public class foo {
  public foo(){
    Bar = "bar";
  }
  public string Bar {get;set;}
}

如果你有另一个构造函数(例如,一个接受参数的构造函数)或一堆构造函数,你总是可以拥有这个(称为构造函数链):

代码语言:javascript
复制
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;}
}

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

票数 36
EN

Stack Overflow用户

发布于 2014-08-30 04:55:33

在C# 6.0中,这将成为可能:

代码语言:javascript
复制
public int Y { get; } = 2;
票数 30
EN

Stack Overflow用户

发布于 2008-10-03 23:04:45

在默认构造函数中(当然还有任何非默认构造函数):

代码语言:javascript
复制
public foo() {
    Bar = "bar";
}

我相信这并不比你的原始代码的性能差,因为这就是幕后发生的事情。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/169220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档