有人能解释一下这两个类在执行上的区别吗

本文关键字:执行 区别 两个 能解释 一下 | 更新日期: 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;
    } 
}
一个是字段。另一个是财产。name2中的姓氏属性由编译器转换为getter和setter方法对。