public class A {
public Par mParams;
public Par Parameters {
get { return mParams; }
set { mParams = value; }
}
}
public Par Parameters
は何に新しいですか?これは、クラスも関数でもないようです。ここで混乱している。
public class A {
public Par mParams;
public Par Parameters {
get { return mParams; }
set { mParams = value; }
}
}
public Par Parameters
は何に新しいですか?これは、クラスも関数でもないようです。ここで混乱している。
は、Javaでpublic Par getParameters()
とpublic void setX(Par p)
方法のように考えてください。だから、それは "関数"に最も近いですが、実際には "プロパティ"と呼ばれています。あなたはこのようにそれを使用することができます。これは、公共の場に裏打ちされたプロパティです
A myObject = new A();
a.Parameters = new Par(...);
、この場合には、それはやや冗長である、mParmsはprotected
またはprivate
として宣言する必要があります。
プロパティのMSDN Programming Guideを確認することをお勧めします。彼らはどのように動作し、どのように使用されているか、非常によく説明します。
public Par Parameters
はmParamsの値を設定するか、または取得するために使用されるプロパティです。
Timありがとうございます。/ –
Public Par Parameters
からのコードのブロックは、私が実際にプライベートでなければなりませんラインpublic Par mParams;
を疑うプロパティ
です。それは、プロパティの値を格納する基礎となる変数であることを意味します。
明示的にmParamsがC#で明示的に必要ないことを指摘しておく価値があります。
Public Par Parameters { get; set; }
これはコメントです。 –
合意 - 私の最善の答えではありません - 私はそれを改善しましたが、遅すぎます:-( – iandotkelly
アクセサーとミューテータの略語です。自動プロパティを定義することができます。別の例:
private int i = 0;
public int myNumber {
get { return i; }
set { i = value; }
}
変数i
を変更することができます。そのコードのように:
className.myNumber = 20;
// className.i is now 20
何が起こったのか説明するのに妥当な仕事をしますが、 – Thorarin
それは非常にその唯一の目的はあなたがmParams
フィールドへのアクセスを提供することであるメソッド(関数)のペアのように動作しproperty、です。 syntactic sugarのビットとして、C#では変数と同じように割り当てと読み込みを行うことができます。あなたがParameters
にアクセスするときに呼び出され、直接を呼び出すことはできませんが、二つの方法、getParameters
とsetParameters
、と考えてください。
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つの「見えない」メソッドを実行しています。
Parameters
はPar
のPropertyです。 access modifier(public
)です。つまり、コード内のどこからでもアクセスできます。
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つのmethods:GetParameters
とSetParameters
を作成することで実現します。実際、C#コンパイラはバックグラウンドで非常に似た名前のメソッドを生成します。
メンバ変数を公開せず、プロパティを公開したくないので、mParamsをprivateにするのが一般的です。より新しい.NETバージョンでは、このように見える自動実装されたプロパティを使用することができます。 'public Par Parameters {get;セット; } '' mParams'の必要はありません。 –