0

この顧客クラスの簡単な実装を見てください。

class Customer
{
    public double TotalPurchases { get; set; }
    public string Name { get; set; }
    public int CustomerID { get; set; }

    public Customer(double purchases, string name, int ID)
    {
        TotalPurchases = purchases;
        Name = name;
        CustomerID = ID;
    }
}

顧客名の取得および設定オプションがあることに気付きました。顧客名を変更する必要があるとしましょう。

次のような方法で顧客名を変更する方が受け入れられますか?

public void changeName(string name)
{
    this.Name = name;
}
Customer cus = new Customer(5,"John",5005);
cus.changeName("Jim");

または、次のようにして変更してもかまいません。

cus.Name = "Jim";
4

3 に答える 3

1

Name プロパティの設定によって状態が変化したり、顧客クラスのユーザーに対して透過的であってはならないと判断したアクションを実行したりする場合は、メソッド アプローチを使用します。他のすべてにはプロパティ アプローチを使用します。

于 2013-08-17T23:55:40.933 に答える
1

プロパティを変更するメソッドを持つ必要はありません。プロパティが存在する理由は、フィールドへのアクセスに関する追加のロジックを実装できるようにするためです。基本的に、プロパティはプライベート フィールドを作成し、アクセサー/ミューテーター メソッドを自動的に生成します。

次のようなプロパティpublic string Foo { get; set; } は次と同等です

private string foo;
public string Foo 
{
    get
    {
        return foo;
    }
    set
    {
        foo = value;
    }
}

したがって、たとえば、追加のロジックを実装できます。

private string foo;
public string Foo 
{
    get
    {
        return foo.Trim();
    }
    set
    {
        if (value == "bar") 
        {
            throw new Exception("validation");
        }
        foo = value;
    }
}
于 2013-08-17T23:54:29.427 に答える
0

あなたは明らかに Java のバックグラウンドを持っています (私もそうです :-) ) 。C#cus.Name = "Jim" ;では絶対に有効です。その理由は、割り当てのように見えるものは、実際には「セッター」関数呼び出しであるためです。この関数は、任意のコードで再定義できますが、呼び出す構文はcus.Name = "Jim" ;.

これは参照の均一性と呼ばれ、Java がサポートしていないのは本当に残念なことです。

于 2013-08-17T23:55:13.400 に答える