0

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

3 回答 3

3

前者编译为相同:

public class name
{
    public string name1 {get;set;}
    public surname surname;
    public name()
    {
        surname = new surname();
    }
}

所以唯一的区别是1你有一个字段,2你有一个属性。由于它是公共的,因此您应该使用属性。请参阅为什么在 C# 中使用简单属性而不是字段?原因。

顺便说一句,C# 命名约定是所有属性、类和方法都是 PascalCase,而不是 camelCase,因此示例中的所有内容(可能的surname字段除外)都应以大写字母开头。

于 2013-07-03T17:33:45.400 回答
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;
    } 
}
于 2013-07-03T17:37:02.297 回答
0

一是场。另一个是财产。name2 中的 surname 属性由编译器翻译成 getter 和 setter 方法对。

于 2013-07-03T17:32:08.150 回答