2

Fooという名前のプロパティの基になるフィールドが「k__BackingField」と呼ばれるという事実に頼ることはできますか?

4

4 に答える 4

5

いいえ、要するに。

そして、まさにこの理由から、自動プロパティは、フィールドベースのシリアライザーで使用すると苦痛になりますBinaryFormatter(以前にここで言及したと思います ;-p)。

これに関するいくつかの考え(および解決策)については、難読化、シリアル化、および自動的に実装されたプロパティを参照してください。

于 2009-07-23T13:20:20.850 に答える
3

仕様がバッキング フィールドの名前を指定していないこと (正当な理由があります - それに依存するべきではありません)。

たとえば、Mono コンパイラが同じことを行うかどうかを調べる必要があります。

フィールドに がCompilerGeneratedAttribute適用されていることを確認することは良い考えです。

明示的なインターフェイスの実装は、(現在) 次のようになることに注意してください。

<Full.Namespace.To.Interface.IBlah.Foo>k__BackingField

したがって、この方法でクラスの特定の側面をシリアライズしようとするコードは誤解を招く可能性があります。

あなたのコードについて本当にベルトとブレースになりたい場合は、mono の Cecil のようなライブラリを使用して、プロパティの get 関数を調べ、使用されるフィールドを決定することができます。

于 2009-07-23T13:47:26.870 に答える
0

もちろん違います。それはプライベートな実装の詳細になります。

そして、一体なぜあなたは知りたいのですか?

于 2009-07-23T13:18:50.120 に答える
0

私はそうは思わない。バッキング フィールドが必要な場合は、「通常の」プロパティを使用します。

于 2009-07-23T13:19:23.893 に答える