10

自動プロパティにより、このコードを置き換えることができます。

private MyType myProperty;
public MyType MyProperty
{
    get { return myPropertyField; }
}

このコードで:

public MyType MyProperty { get; private set; }

あちこちでいくつかの変更がありますが、このコードを置き換える方法はありますか?

private readonly MyType myProperty;
public MyType MyProperty
{
    get { return myPropertyField; }
}

似たようなもので?

4

6 に答える 6

10

確かに、現在これを行う方法はありません。

C#3では、哲学的な撞着語が少し生成されたことがわかります。LINQの設計は、従来の不変の関数型プログラミングに深く浸透しています。実行は延期され、クエリは不変のモナドで表され、式ツリーは不変です。

それでも同時に、オブジェクト初期化子、コレクション初期化子、および自動小道具はすべて、従来の可変コンポーネントベースのプログラミングスタイルを促進します。両方向に進んでいるようです。これはC#の性質を示しています。これは、さまざまなスタイルのプログラミングをサポートする実用的なプログラミング言語です。

ただし、私たちは皆、不変のプログラミングスタイルの大ファンであり、このスタイルは、将来のユビキタスマルチコアアーキテクチャで大規模なマルチスレッドアプリケーションの正確性を確保するのを容易にするのに役立つと信じているので、私たちは間違いなく興味を持っています私たちが導入した可変性を飼いならすための何らかの方法を考え出すことで。読み取り専用のautopropsは、それを行うための明白な方法の1つです。小さな一歩ですが、良い一歩です。

とはいえ、C#4はまだ出荷されておらず、その後、新しい言語機能が追加されることも発表されていません。未発表の製品の仮想的な機能についての私の考えはすべて、約束や発表ではなく、「娯楽目的のみ」の推測として扱う必要があります。

于 2009-10-08T14:52:09.093 に答える
7

いいえ、しかしこのアイデアはConnectで追跡されています

于 2009-10-08T09:40:01.550 に答える
5

残念ながら、そうではありません。私はこの機能がとても欲しいです、それはこのように見えるかもしれません:

public readonly string Name { get; }

または(少し奇妙なことに)

public readonly string Name { get; readonly set; }

これは次のように変換されます。

private readonly string <>_Name;

public string Name { get { return <>_Name; } }

ひねりは、setter呼び出しが許可されることですが、コンストラクター内でのみ許可されます。このような呼び出しは、バッキングフィールドへの割り当てに直接変換されます。

私は心から、心からそのような機能が大好きです。多分C#5のために...

于 2009-10-08T09:45:53.503 に答える
1

readonlyフィールドにしか適用できないので、私は信じていません。

あなたはただ使うことができませんでした:

public readonly MyType MyProperty;

とにかくコンストラクターからのみ割り当てることができるので?

于 2009-10-08T09:39:13.360 に答える
1

いいえ、それを行う方法はありません。実際、以前に設定されていないプロパティの値を取得したい理由がわかりません。明らかな理由で、アクセサもバッキングフィールドもない場合は値を設定できません。set

于 2009-10-08T09:40:35.373 に答える
-1

それは本当に複雑な仲間です。

パブリック読み取り専用フィールドにするだけです。

于 2009-10-08T09:42:54.267 に答える