0

質問がややばかげているように聞こえることは知っていますが、このシナリオがあります。

環境

多くの共通点を持つ 2 つのバックグラウンド タスク (METRO アプリ、winRT) を作成しています。今私が欲しいのは、共通の機能を定義する共通の基本クラスと、基本クラスから派生する2つのタスクです。

問題: バックグラウンド タスクは WinMD をターゲットにする必要があり、このモードでは、シールされていないパブリック クラスを作成することはできません。シールを作成すると、そこから派生できません。また、プライベートを作成すると、ベースがプライベートであるため、派生型を公開できません。

懸念事項: 目的の機能を実現する方法は何ですか。(プライベート ベースから派生したパブリック型)。1つの方法は、(継承の代わりに)コンポジションを使用することです

4

2 に答える 2

4

あなたは単にできません。.NET では、派生型を基本型よりもアクセスしやすくすることはできません。基本型を公開する必要があります。

内部コンストラクターのみを指定すると、他のコードはそれをインスタンス化したり、独自の派生型を作成したりできないことに注意してください...その時点でそれを公開することの問題は何ですか?

編集:さて、質問を読み直して、これを見ました:

シールされていない public クラスを作成することはできません

そう:

  • 関連するすべてのタイプを内部にできますか?
  • パブリック抽象クラスにできますか?(WinMD はそれを許可しますか?)

(WinMD で許可されていることに関する他のドキュメントがある場合は、それが役立ちます。)

インターフェイスのエクスポートが許可されている場合は、基本クラスと派生クラスを内部に持つことができますが、それらにパブリック インターフェイスを実装させることができます。次に、パブリック静的クラスにパブリック静的メソッドを配置して、これらの内部型のインスタンスを作成し、インターフェイスを介してそれらを返します。繰り返しますが、これが許可されているかどうかはわかりません。WinMD で許可されていることに関するドキュメントへのリンクがあれば、WinRT 開発を行ったことのない私たちにとって役立ちます。

于 2012-05-08T06:21:47.930 に答える
0

はい、派生クラスで非表示にしてからbase.Property、つまり、

new public ScrollBar HorizontalScrollBar
    {
        get { return base.HorizontalScrollBar; }
    }
于 2012-08-02T20:15:56.913 に答える