C#属性定义

时间:2010-04-28 15:05:18

标签: c#

对于C#属性,我可以这样做:

public class Employee{

 public string Name { get; private set; }

 public Employee(string name){
  Name = name;
 }

}

表示可以在Employee&类中设置Name属性。可以公开阅读。

但是,如果我想将集合限制在Employee类的构造函数中,我需要这样做:

public class Employee{
 public readonly string Name = String.Empty;
 public Employee(string name){
  Name = name;
 }
}

但是,对于这种情况,我不得不将属性更改为字段。

C#中是否存在任何可能/不允许的原因:

public class Employee{
 public string Name { get; private readonly set; }
 public Employee(string name){
  Name = name;
 }
}

IMO这将允许我们拥有只能在构造函数和设置中设置的属性。不要求我们将属性更改为字段...

谢谢!

5 个答案:

答案 0 :(得分:7)

使用

private readonly string name = Empty.String;
public string Name { get { return name; } }

答案 1 :(得分:2)

出了什么问题:

public class Employee
{

 private string nameField;
 public string Name 
 { 
  get
  {
    return this.nameField;
  }
 }
 public Employee(string name)
 {
   this.nameField = name;
 }

答案 2 :(得分:1)

readonly适用于变量而不适用于方法。 set由编译器转换为方法,因此readonly属性没有意义。

为了达到你想要的目标。

public class Employee
{
   private readonly string _name;

   public string Name
   { 
      get
      {
         return _name;
      }
   }

   public Employee(string name)
   {
      _name = name;
   }
}

答案 3 :(得分:0)

如果你只关心在你当前所在的类的构造函数中设置属性,那么只需将它设置为具有私有setter的属性,并且不要在类中设置它...它不像你无法控制这种情况。

$ 0.02

答案 4 :(得分:0)

你可以拥有

public class Employee{
 public string Name { get; private set; }
 public Employee(string name){
  Name = name;
 }
}

这将成为一个只读的公共财产。如果你考虑一下,在公共财产上拥有一个私有的只读setter并不是真的有意义,因为你想要setter只读取一个方法,而不是一个变量。

如果你只是设置了setter,那么你所做的就是拒绝任何设置属性值的访问。这就是您需要支持字段的原因。