Fooという名前のプロパティの基になるフィールドが「k__BackingField」と呼ばれるという事実に頼ることはできますか?
4 に答える
いいえ、要するに。
そして、まさにこの理由から、自動プロパティは、フィールドベースのシリアライザーで使用すると苦痛になりますBinaryFormatter
(以前にここで言及したと思います ;-p)。
これに関するいくつかの考え(および解決策)については、難読化、シリアル化、および自動的に実装されたプロパティを参照してください。
仕様がバッキング フィールドの名前を指定していないこと (正当な理由があります - それに依存するべきではありません)。
たとえば、Mono コンパイラが同じことを行うかどうかを調べる必要があります。
フィールドに がCompilerGeneratedAttribute
適用されていることを確認することは良い考えです。
明示的なインターフェイスの実装は、(現在) 次のようになることに注意してください。
<Full.Namespace.To.Interface.IBlah.Foo>k__BackingField
したがって、この方法でクラスの特定の側面をシリアライズしようとするコードは誤解を招く可能性があります。
あなたのコードについて本当にベルトとブレースになりたい場合は、mono の Cecil のようなライブラリを使用して、プロパティの get 関数を調べ、使用されるフィールドを決定することができます。
もちろん違います。それはプライベートな実装の詳細になります。
そして、一体なぜあなたは知りたいのですか?
私はそうは思わない。バッキング フィールドが必要な場合は、「通常の」プロパティを使用します。