7

VS コンパイラでは、WINMD タイプ ライブラリのシールされた公開型を作成できません。

なぜこの制限が設けられているのですか? (シール型の利点については知っています。私の質問は、Win RT コンポーネントに関するものです)。

4

2 に答える 2

4

これは、COM によって課されるアーキテクチャ上の制限です。WinRT 型の中核に位置するもので、IUnknown と IInspectable から派生しています。COM の問題は、インターフェイスの継承のみがサポートされ、実装の継承はサポートされないことです。これは COM 設計の強力な目標でしたが、実装の継承は、悪名高いダイヤモンドの問題を含め、実装の詳細が多すぎます。

委任によって継承を機能させる方法があります。派生クラスの各メソッドは、対応する基本インターフェイス メソッドを明示的に呼び出しますが、それを自分で行うのは非常に面倒です。それ以外の場合は、Windows.UI.Xaml クラスが継承を実装する方法です。

于 2012-05-08T12:04:07.683 に答える
1

その理由は、公開された型がすべての異なる種類の言語 (C#、C++、JavaScript など) から使用できるようにする必要があるためだと思います。

したがって、クラスがある場合、クラスの使用の 1 つはそれを新しいクラスにオーバーライドすることです。別の言語で行われるクラスをオーバーライドしたい場合があります。しかし、これは問題です。C# で行われた基本クラスを、C++ で行われた継承クラスによってどのようにオーバーライドしますか? どちらも完全に異なり、互換性のない OOP 実装を持っているため、これは決して機能しません。

公開されたクラスを強制的に封印することで、この問題を取り除き、人々がこのようなことをしようとしないようにします。

これ以外にももっと根本的なことがあると思いますが、これが最初に頭に浮かびました。

于 2012-05-08T10:59:26.950 に答える