C# 有人能解释一下这两个类在执行上有什么不同吗?

C# 有人能解释一下这两个类在执行上有什么不同吗?,c#,C#,我在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;

我在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;}
}

一个是一个领域。另一个是财产。name2中的姓氏属性由编译器转换为getter和setter方法对。

一个是字段。另一个是财产。name2中的姓氏属性由编译器转换为getter和setter方法对。

前者编译为:

public class name
{
    public string name1 {get;set;}
    public surname surname;
    public name()
    {
        surname = new surname();
    }
}
所以唯一的区别是在
1
中有一个字段,在
2
中有一个属性。因为它是公共的,所以您应该使用属性。请参阅以了解原因


另一方面,C#命名约定是所有属性、类和方法都是PascalCase,而不是camelCase,因此示例中的所有内容(可能除了
姓氏
字段)都应该以大写字母开头。

前者编译为:

public class name
{
    public string name1 {get;set;}
    public surname surname;
    public name()
    {
        surname = new surname();
    }
}
所以唯一的区别是在
1
中有一个字段,在
2
中有一个属性。因为它是公共的,所以您应该使用属性。请参阅以了解原因


另一方面,C#命名约定是所有属性、类和方法都是PascalCase,而不是camelCase,因此示例中的所有内容(可能除了
姓氏
字段)都应该以大写字母开头。

我重写了你的类,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;
    } 
}

我重写你的类,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;
    } 
}

... 我很确定这行代码是
public姓氏=新姓氏()
在C#中甚至都不是有效的语法。没关系,是你编辑的。是我编辑的一个胖手指。啊,好的。没问题:)作为参考,您可以查看。。。。我很确定这行代码是
public姓氏=新姓氏()
在C#中甚至都不是有效的语法。没关系,是你编辑的。是我编辑的一个胖手指。啊,好的。没问题:)作为参考,您可以查看。