我在Linqpad中测试了一个类并构建了一个基本类,但无法理解这两个类在执行方面的差异。有人可以帮帮我吗?
public class name // 1
{
public string name1 {get;set;}
public surname surname = new surname();
}
public class name // 2
{
public string name1 {get;set;}
public surname surname {get;set;}
public name()
{
surname = new surname();
}
}
public class surname
{
public string surname1 {get;set;}
public string surname2 {get;set;}
}
答案 0 :(得分:3)
前者编译为:
public class name
{
public string name1 {get;set;}
public surname surname;
public name()
{
surname = new surname();
}
}
唯一的区别是1
你有一个字段,而2
你有一个属性。由于它是公开的,你应该使用一个属性。有关原因,请参阅Why use simple properties instead of fields in C#?。
顺便说一句,C#命名约定是所有属性,类和方法都是PascalCase,而不是camelCase,所以示例中的所有内容(可能除surname
字段外)都应该以大写字母。
答案 1 :(得分:1)
我重写你的类,clr像这样定义你的代码
public class name // 1
{
private string _name1;
public string get_name1()
{
return _name1;
}
public void set_name1(string value)
{
this._name1=value;
}
public surname surname = new surname();
}
public class name // 2
{
private string _name1;
public string get_name1()
{
return _name1;
}
public void set_name1(string value)
{
this._name1=value;
}
private surname _surname = new surname();
public surname get_surname()
{
return _surname;
}
public void set_surname(surname value)
{
this._surname=value;
}
}
答案 2 :(得分:0)
一个是一个领域。另一个是财产。 name2中的surname属性由编译器转换为getter和setter方法对。