0

子コントロールから親にプロパティを伝達する方法はありますParent.Property1Parent.Child.Property1? 私は継承を使用できません-私の親は子の型を拡張できません-別のクラスから継承されます。

また、次のような子から親への各プロパティのコードを追加したくありません。

public object Property1
{
   get{ return Child.Property1; }
   set{ ChildProperty1 = value; }
}

たぶんリフレクションを使用しています-このようなものですか?

public PropertyInfo[] Properties
{
  get{ return Child.GetType().GetProperties(); }
  set{ Child.GetType().GetProperties().SetValue() = value.GetValue()}
}

ありがとう

4

2 に答える 2

2

親を変更せずに、子を継承する必要はありません。プロパティを通過するだけです。

親の場合:

public object Property1
{
    get { return Child.Property1; }
    set { Child.Property1 = value; }
}

Parent.Child.Property1その後、によってもアクセスできますParent.Property1

編集:あなたがそのようにそれをしたくないというあなたの質問を編集したので、それから「いいえ、それは不可能です。」に戻ってください!

于 2012-03-24T11:12:45.140 に答える
0

これは、あなたが直面している非常に古い設計上の問題です。C# には明確な解決策はありません。
これは通常、子プロパティをラップすることで解決されます (すでにすべての人が指摘しているように)。これは面倒な場合があります。または、b) 子を公開することもよくありますが、これは多くの場合、最善の方法ではありません。
あなたは本当にそれをしたくないので、私は反射をお勧めしません。パフォーマンスは別として (小さなアプリでは気付かないかもしれませんが、そのスタイルのコーディングを採用すると、すぐに悩まされることになるでしょう)、それは単なるデザインの悪さ、コードの乱雑さ、理解の困難さをもたらすだけです。どこで、誰がリフレクションを使用して他の部分またはアクセスを変更している可能性がありますか-「自分のコード」(この場合)にそれを実行したくない場合は、通常、強制的に他のコードを使用する場合のみ-または一部つまり、一般的な非一般的な世界を横断したり、動的プロパティを取得したりするなど、他の方法がないことを保証します。

そうは言っても、
他の方法で望ましいことを達成するために、通常はいくつかを再設計できます。
たとえば、インターフェイスを使用して子を間接的に公開するか、プロパティを使用する必要があるときに、プロパティを所有するクラスが「チェーン内」の適切な場所に配置されるように物事を移動します。
つまり、これを説明するのは難しいです。これには非常に具体的なシナリオを念頭に置き、次に非常に具体的な解決策が必要になるためです。しかし、通常、これらの問題を解決する何らかの「優れた設計」が常に存在します。問題とは、通常、次のことを意味
します。
2)または、他に方法がないという状況にあるだけです:) ...
...これがいくつかの助けになることを願っています

于 2012-03-24T12:53:10.073 に答える