0

Linqpad でクラスをテストし、基本的なクラスを構築しましたが、2 つのクラスの実行の違いについて理解できません。誰かが私を助けてくれますか?

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 であるため、例のすべてのもの (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

1つはフィールドです。もう一つはプロパティです。name2 の surname プロパティは、コンパイラによって getter メソッドと setter メソッドのペアに変換されます。

于 2013-07-03T17:32:08.150 に答える