在构造函数中设置字段 vs. { get;set;} 属性

D12*_*ica 7 c#

给定一个类:

public class NicePeople {
     public string VNP_Name;
     public int VNP_Age;
     public float VNP_Score;

     public NicePeople(string inName, int inAge, float inScore){
         VNP_Name = inName;
         VNP_Age = inAge;
         VNP_Score = inScore;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你像这样使用它:

NicePeople nicePerson = new NicePeople("Joe", 55, 1.6f);
Run Code Online (Sandbox Code Playgroud)

那和:有什么区别吗?

public class NicePeople {
     public string VNP_Name {set;get;}
     public int VNP_Age {set;get;}
     public float VNP_Score {set;get;}        
}
Run Code Online (Sandbox Code Playgroud)

如果不是,构造函数是否仅用于您想要做一些额外工作(例如检查有效值等)并且完全不需要基本内容?

Nik*_*tak 9

这里真正的问题是何时使用构造函数参数与属性。其他人已经提到了原因。这是另一个。

如果没有这些值就无法创建类实例,请使用参数化构造函数。可以使用属性设置实例的任何可选属性。考虑一个Person类。任何人都至少需要一个名字来识别。但是,年龄可以是可选信息。

public class Person {
    public Person(string name) {
        Name = name;
    }

    public string Name { get; private set; }
    public int Age { get; set; }
}
Run Code Online (Sandbox Code Playgroud)