有人能解释一下这两个类在执行上的区别吗
本文关键字:执行 区别 两个 能解释 一下 | 更新日期: 2023-09-27 18:20:57
我在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;}
}
前者编译为:
public class name
{
public string name1 {get;set;}
public surname surname;
public name()
{
surname = new surname();
}
}
所以唯一的区别是在1
中有一个字段,在2
中有一种属性。既然它是公共的,你就应该使用一处房产。请参阅为什么在C#中使用简单属性而不是字段?原因。
顺便说一句,C#的命名约定是所有属性、类和方法都是PascalCase,而不是camelCase,所以示例中的所有内容(可能除了surname
字段)都应该以大写字母开头。
我重写你的类,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;
}
}