2011-05-25 9 views
4

セッターに引数を渡す方法はありますか? 文字列を下のセッターにどのように渡すのですか? 新しい文字列パラメータでセッターを呼び出す方法は?セッターに引数を渡す方法はありますか?

public string It 
{ 
    get{ { return it;} 

    set { it = value;} 
} 

は、変数に値を割り当てることができるようにあなたがそれを割り当てることができ、あなたに非常に多くの

答えて

4

ありがとう:

It = "My String"; 

プロパティのゲッター/セッターはstring get_It()void set_It(string value)

のためだけ糖衣構文です
10

セッターは、プロパティに割り当てた値に基づいて、valueを独自の「引数」として取得します。

foo.It = "xyz"; // Within the setter, the "value" variable will be "xyz" 

あなたは追加のパラメータを使用する場合は、インデクサ必要があります。

public string this[string key] 
{ 
    get { /* Use key here */ } 

    set { /* Use key and value here */ } 
} 

をあなたは、あなたがインデクサを与えることができない

foo["key"] = "newValue"; 

としてアクセスしたいですC#の名前を使用するか、他の言語の名前付きインデクサを名前で使用します(COMの場合はC#4の場合を除く)。

編集:Colinが指摘したように、インデクサーは慎重に使用する必要があります。たとえば、セッターだけの追加パラメーターを取得する方法として使用しないでください。たとえば、ゲッターで無視します。このような何かがひどいのようになります。

// Bad code! Do not use! 
private string fullName; 
public string this[string firstName] 
{ 
    get { return fullName; } 
    set { fullName = firstName + " " + value; } 
} 

// Sample usage... 
foo["Jon"] = "Skeet"; 
string name = foo["Bar"]; // name is now "Jon Skeet" 
+1

これを追加するだけです。設定しているものがある種の索引付け可能なセマンティクスを持っていない限り、コードを管理する誰もが何が起こっているのだろうかと思うので、インデクサーを使用しないでください。 –

+0

それはfullNameを返すべきではありません。 getterの代わりにfirstNameを返す。それが "Jon Skeet"を返すために、現在のコードは "Bar"を返すでしょうか? –

+0

@ジョン:はい、それが意図でした。ドー!一定。 –

0

一般的に、任意のプロパティについては、直接私たちは値つまりを割り当てることができ、It = ""; C#のプロパティの基本だ

1

Properties (C# Programming Guide)

をそのプロパティを持つオブジェクトを作成するとしましょう:

Blah blah = new Blah(); 
blah.It = "Hello World"; 
String hey = blah.It; 

プロパティの考え方は、ローカル変数への呼び出しをいくつかのより多くのロジック(およびいくつかの隠蔽)で囲むことです。したがって、構文はローカルクラス変数を使用する場合と似ています

2

プロパティはC#で引数を受け入れません。

あなたが本当にその後、推奨される解決策は、メソッドとしてセッターを実装することで、正しくSE Itするために、aditional情報が必要な場合:誰もが、この歳のスレッドで言ったことを補完する

public void SetIt(string value, string moreInfo) {...} 
0

...

おそらくより良い方法は、あなたが渡したい余分な情報を保持するためにstructを定義し、次にこのようにデータを渡すことです。たとえば:

struct PersonName { 

    public string Forename { get; set; } 
    public string Surname { get; set; } 

    public PersonName(string fn, string sn) { 
     Forename = fn; 
     Surname = sn; 
    } 

} 

class MyPerson { 

    public string Forename { get; set; } 
    public string Surname { get; set; } 
    public DateTime dob { get; set; } 

    ... 

    public PersonName Fullname { 
     get { return Forename + " " + Surname; } 
     set { 
      Forename = value.Forename; 
      Surname = value.Surname; 
     } 
    } 
} 

... 

    public void main() { 
     MyPerson aPerson = new MyPerson; 
     aPerson.Fullname = new PersonName("Fred", "Bloggs"); 
    } 

個人的には、私は個人的には、それほどマイナーなものだと思います。また、それでは、なぜ、ForenameSurnameというペアが適切なものとして定義されていないのでしょうか?structPersonName)?

関連する問題