2011-07-21 10 views
2
public class A { 
    public Par mParams; 
    public Par Parameters { 
     get { return mParams; } 
     set { mParams = value; } 
    } 
} 

私はC#のこのコードはC#で何を行い、目的は何ですか?

public Par Parametersは何に新しいですか?これは、クラスも関数でもないようです。ここで混乱している。

+3

メンバ変数を公開せず、プロパティを公開したくないので、mParamsをprivateにするのが一般的です。より新しい.NETバージョンでは、このように見える自動実装されたプロパティを使用することができます。 'public Par Parameters {get;セット; } '' mParams'の必要はありません。 –

答えて

9

は、Javaでpublic Par getParameters()public void setX(Par p)方法のように考えてください。だから、それは "関数"に最も近いですが、実際には "プロパティ"と呼ばれています。あなたはこのようにそれを使用することができます。これは、公共の場に裏打ちされたプロパティです

A myObject = new A(); 
a.Parameters = new Par(...); 

、この場合には、それはやや冗長である、mParmsはprotectedまたはprivateとして宣言する必要があります。

プロパティのMSDN Programming Guideを確認することをお勧めします。彼らはどのように動作し、どのように使用されているか、非常によく説明します。

+0

ありがとうございました。 –

+0

ようこそ。ハッピープログラミング! – Nate

+0

@David Degea - ネイトの答えを受け入れることを忘れないでください(またはあなたが選ぶ人は誰でも、私はネイトが最もcompelete and concise answerを与えたと思います)。 – Tim

2

public Par ParametersはmParamsの値を設定するか、または取得するために使用されるプロパティです。

+0

Timありがとうございます。/ –

3

Public Par Parametersからのコードのブロックは、私が実際にプライベートでなければなりませんラインpublic Par mParams;を疑うプロパティ

です。それは、プロパティの値を格納する基礎となる変数であることを意味します。

明示的にmParamsがC#で明示的に必要ないことを指摘しておく価値があります。

Public Par Parameters { get; set; } 
+0

これはコメントです。 –

+0

合意 - 私の最善の答えではありません - 私はそれを改善しましたが、遅すぎます:-( – iandotkelly

2

アクセサーとミューテータの略語です。自動プロパティを定義することができます。別の例:

private int i = 0; 
public int myNumber { 
    get { return i; } 
    set { i = value; } 
} 

変数iを変更することができます。そのコードのように:

className.myNumber = 20; 
// className.i is now 20 
+0

何が起こったのか説明するのに妥当な仕事をしますが、 – Thorarin

1

それは非常にその唯一の目的はあなたがmParamsフィールドへのアクセスを提供することであるメソッド(関数)のペアのように動作しproperty、です。 syntactic sugarのビットとして、C#では変数と同じように割り当てと読み込みを行うことができます。あなたがParametersにアクセスするときに呼び出され、直接を呼び出すことはできませんが、二つの方法、getParameterssetParameters、と考えてください。

Parameters = new Par(); //Works as though you had run: setParameters(new Par()); 
Par x = Parameters;  //Works as though you had run: Par x = getParameters(); 

これは、あなたがより短く、より便利かつ表現力豊かな変数に似た構文を使用することができますが、何あなたが実際にやっていることは、コンパイラによって作成された2つの「見えない」メソッドを実行しています。

2

ParametersParPropertyです。 access modifierpublic)です。つまり、コード内のどこからでもアクセスできます。

mParams fieldは実際には公開されており、公開するプロパティはフィールドの返却と設定を除いて何もしないため、少し冗長です。ただし、それぞれの「アクセサ」(getおよびsetビット)に余分なコードを追加する可能性があります。検証を行うにはたとえば、あなたがフィールドとほぼ同じ方法でプロパティを使用

など、プロパティが変更された何かを知らせる:

A foo = new A(); 

// Calls the "get" accessor of the Parameters property 
if (foo.Parameters == null) 
{ 
    // Calls the "set" accessor of the Parameters property 
    foo.Parameters = new Par(); 
} 

は、それが直接のアクセスを許可しないことがベストプラクティスと考えられていますクラスの外部からのメンバフィールド(変数)。典型的なシナリオでは、フィールドは、したがって、プライベート(または時には保護)する必要があります:

private Par mParams; 

public Par Parameters 
{ 
    get { return mParams; } 
    set { mParams = value; } 
} 

あなたにもについて学ぶことになるでしょう、いくつかのわずかに異なる構文があります。まず、auto-implemented propertyがある:

自動実装プロパティの場合
public Par Parameters 
{ 
    get; 
    set; 
} 

、C#コンパイラが自動的にバッキングフィールドを生成します。これにより、プロパティゲッターとセッターにロジックを含める必要がない場合に、コードを記述する手間が省けます。

また、あなたはフィールドでは達成することができない方法でアクセスを制限するためのプロパティを使用することができます。

public Par Parameters 
{ 
    get; 
    private set; 
} 

お知らせset「アクセサ」は、それが自分のアクセス修飾子のしています。その結果は、一般に判読可能なプロパティですが、クラス自体のみが設定できます。効果的に同じことを行いますが、自動実装プロパティのない

private Par mParams; 

public Par Parameters 
{ 
    get { return mParams; } 
} 

:これは似ています。

プロパティをサポートしていない言語では、これはすべて2つのmethodsGetParametersSetParametersを作成することで実現します。実際、C#コンパイラはバックグラウンドで非常に似た名前のメソッドを生成します。

関連する問題