代码之家  ›  专栏  ›  技术社区  ›  Sunny

C属性定义

c#
  •  1
  • Sunny  · 技术社区  · 16 年前

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

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

    这意味着可以在类中设置name属性employee&可以公开读取。

    但是,如果要将集合限制为仅在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 回复  |  直到 16 年前
        1
  •  7
  •   Danvil    16 年前

    使用

    private readonly string name = Empty.String;
    public string Name { get { return name; } }
    
        2
  •  2
  •   ChrisBD    16 年前

    怎么了:

    public class Employee
    {
    
     private string nameField;
     public string Name 
     { 
      get
      {
        return this.nameField;
      }
     }
     public Employee(string name)
     {
       this.nameField = name;
     }
    
        3
  •  1
  •   DevinB    16 年前

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

    为了完成你想要的。

    public class Employee
    {
       private readonly string _name;
    
       public string Name
       { 
          get
          {
             return _name;
          }
       }
    
       public Employee(string name)
       {
          _name = name;
       }
    }
    
        4
  •  0
  •   Ian P    16 年前

    如果只关心在当前所在类的构造函数中设置属性,只需将其设置为具有私有setter的属性,而不在类中设置。这不是说你不能控制局面。

    0.02美元

        5
  •  0
  •   lomaxx    16 年前

    你可以拥有

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

    它将成为只读的公共属性。如果你仔细想想,在公共属性上有一个私有的readonly setter并不真正有意义,因为你希望setter是readonly,这是一个方法,而不是一个变量。

    如果要将setter设为只读,实际上您所做的就是拒绝任何设置属性值的访问。这就是为什么你需要后场。