3

カスタムのいくつかの抽象基本クラスが必要ですUserControlその理由は明らかです。それらはいくつかの共通のプロパティとメソッド (実際にはインターフェイスのいくつかの要素の基本的な実装) を共有しており、それらを一度だけ実装したいからです。

抽象基本クラスを定義することでこれを行いました。

public abstract class ViewBase : UserControl, ISomeInterface

次に、いつものように、デザイナーを使用してビューの 1 つを実装しました。

public partial class SpecialView : UserControl //all OK

ここまではすべて問題ありません。ここで、クラスの派生をSpecialView抽象基本クラスに置き換えます。

public partial class SpecialView : ViewBase //disrupts the designer

現在、Visual Studio 2008 のデザイナーは機能しなくなり、次のように述べています。The designer must create an instance of type 'ViewBase' but it cannot because the type is declared as abstract.

どうすればこれを回避できますか? これらすべてのビューに同じコードをコピーしたくないだけです。

情報:抽象クラスではなく仮想メソッドに関する質問がありますが、適切な解決策はありません。

4

4 に答える 4

2

抽象クラスを使用する代わりに、関数を仮想としてマークし、継承クラスでそれらをオーバーライドできます

于 2010-05-04T14:03:52.083 に答える
0

アーバンポテトのこのソリューションを試してみてください。これは、私が実際に説明したことのない奇妙な副作用があり、適切な回避策が得られませんでした。多分あなたは幸運になり、その副作用はありません!

于 2010-09-27T17:30:07.773 に答える
0

Designer で抽象コントロールを操作できることを期待するのは、設計哲学の観点からは意味がないと主張する人もいるかもしれません。抽象クラスは、「X」であることを単に知っているだけでは十分に説明できないタイプのオブジェクトをモデル化する傾向があります。抽象的な鳥や車などはなく、常に特定のタイプの鳥または車です。このように考えると、デザイナーでカスタム コントロールを表示したい場合、それ抽象的なコントロールではなく、特定のタイプのコントロールでなければなりません。そうでなければ、何を見ているのでしょうか? 面倒な理由はわかりますが、Designer がこのようにコーディングされている理由もわかります。

于 2010-09-27T17:43:01.527 に答える