有人可以解释这两个类在执行方面有何不同?

时间:2013-07-03 17:29:55

标签: 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;set;}
    public name()
    {
    surname = new surname();
    }
}
public class surname
{
    public string surname1 {get;set;}
    public string surname2 {get;set;}
}

3 个答案:

答案 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方法对。