-3

次のコードがあります。

    private void button1_Click(object sender, EventArgs e)
    {
        Class1 myClass = new Class1("ttt");
        myClass.Name = "xxx";
        MessageBox.Show(myClass.Name);
    }

class Class1
{
    string str = "";

    public Class1(string name)   
    {
        str = name;
    }

    public string Name
    {
        get { return str; }
        set;

    }
}

最初に設定しました:

  myClass.Name = "ccc";

しかし、後で次のように変更しました:

  myClass.Name = "xxx";

また、次のように変更されました。

  set {str = value;}

に:

  set;

実行すると、「xxx」ではなく「ccc」が表示されるのはなぜですか?

私の現在のコードには「ccc」があります。

4

3 に答える 3

4
public string Name
{
    get { return str; }
    set;

}

する必要があります

public string Name
{
    get { return str; }
    set { str = value; }
}
于 2013-02-17T14:50:50.063 に答える
2

Nameプロパティを次のように変更します。

public string Name
{
    get { return str; }
    set { str = value; }
}

あなたの質問に答えると、「xxx」ではなく「ccc」が表示される理由は、コンパイル エラーがあるためです。アプリケーションを実行すると、最新の既知の動作構成を実行するかどうかを尋ねられます。プログラムが最後にコンパイルされたとき、「ccc」をリテラルとして使用しましたが、それはまだ実行中です。

コンパイルエラーを修正して再度実行すると、「xxx」になります

于 2013-02-17T14:50:41.430 に答える
1

パターン

public string Name {get;set;}

「自動実装プロパティ」と呼ばれるものです。

コンパイラは、プロパティの get および set アクセサーを介してのみアクセスできるプライベートな匿名のバッキング フィールドを作成します。

元のコードが行っているように見えるのは、定義したフィールドを取得することですが、匿名のバッキング フィールドを設定します。したがって、ビルドエラー...

于 2015-06-25T10:52:46.480 に答える