1
public class Foo
{
    public Foo(){ }

    //One of many properties 
    //set up in the same way
    private String _name;
    public String Name 
    { 
        get { return _name; }
        set {
            _name = value;
            //code that is important to run
            //only after the objects initial creation   
        }
    }

    private int _id;
    public int ID 
    { 
        get { return _id; }
        set {
            _id = value;
            //code that is important to run
            //only after the objects initial creation   
        }
    }

    public void Win()
    {
        //clean up method that wouldn't be needed
        //if I used optional parameters because
        //i would be able to set _name (and all the
        //other private properties directly without
        //using the public Set
    }
}

C#でこの種のオブジェクトを作成した後、メソッドを自動的に呼び出すにはどうすればよいですか

Foo ko = new Foo() {
    ID = 4,
    Name = "Chair"
};
ko.Win(); // <-- Want this to be called automatically inside the class
4

4 に答える 4

2

プロパティのランダムなセットが設定された後に自動的に呼び出されるメソッドはありません(これは初期化が変換されるものです...)

var foo = new Foo { Name = "bar" };

実際には次へのショートカットです:

var foo = new Foo();
foo.Name = "bar";

foo.Name2 番目の形式で記述した場合、代入後に魔法のメソッドが呼び出されることは期待できません。

オプション:

  • プロパティの変更時に設定する必要がある情報がある場合は、それをプロパティにして、setその一部にコードを記述してください。
  • オブジェクトが「作成された」と見なされる前に特定のプロパティのセットを構成する必要がある場合、コンストラクター引数はそれを強制する1つの合理的な方法です。
  • 最終的な構築を遅らせるビルダー パターンを実装することもできます (または、最終的なオブジェクトの作成前にパラメーターの設定を強制する他のファクトリ メソッドを使用します)。

ビルダー パターンを使用したコードのサンプル:

 var foo = new FooBuilder { Name = "bar" }
    .Build();
于 2013-03-29T19:42:33.173 に答える
0

ID と Name を常に設定している場合は、これはどうでしょうか。

private string _Name;

    public string Name
    {
        get { return _Name; }
        set {
            _Name = value;
            this.Win();
        }
    }

Win 関数は、名前に値を設定した後に常に呼び出されます。または、選択した ID に対してこれを行うこともできます。

于 2013-03-29T19:39:47.660 に答える
0

Win() をコンストラクターに追加します。コンストラクタ内でコール/プットします。

public Foo(string value, string value2) {
Value = value;
Value2 = valu2e;

Win();
}

これがコンストラクタです。手動で設定してください。

于 2013-03-29T19:25:52.883 に答える
0

最もスケーラブルなソリューションではありませんが、これを試してみませんか:

public class Foo
{
    public int ID { get; set; }
    public String Name { get; set; }

public Foo()
{
}

public Foo( int id )
{
// Win()
ID = id;
// Win()
}

Public Foo( string name )
{
// Win()
Name = name;
// Win()
}

public Foo( int id, string name )
{
// Win()
ID = id;
Name = name;
// Win()
}

    public void Win()
    {
        //Do Stuff that would go into the constructor
        //if I wanted to use optional parameters
        //but I don't
    }
}

Winプロパティを設定する前または後に呼び出すことができます。

于 2013-03-29T19:42:55.513 に答える