VS コンパイラでは、WINMD タイプ ライブラリのシールされた公開型を作成できません。
なぜこの制限が設けられているのですか? (シール型の利点については知っています。私の質問は、Win RT コンポーネントに関するものです)。
VS コンパイラでは、WINMD タイプ ライブラリのシールされた公開型を作成できません。
なぜこの制限が設けられているのですか? (シール型の利点については知っています。私の質問は、Win RT コンポーネントに関するものです)。
これは、COM によって課されるアーキテクチャ上の制限です。WinRT 型の中核に位置するもので、IUnknown と IInspectable から派生しています。COM の問題は、インターフェイスの継承のみがサポートされ、実装の継承はサポートされないことです。これは COM 設計の強力な目標でしたが、実装の継承は、悪名高いダイヤモンドの問題を含め、実装の詳細が多すぎます。
委任によって継承を機能させる方法があります。派生クラスの各メソッドは、対応する基本インターフェイス メソッドを明示的に呼び出しますが、それを自分で行うのは非常に面倒です。それ以外の場合は、Windows.UI.Xaml クラスが継承を実装する方法です。
その理由は、公開された型がすべての異なる種類の言語 (C#、C++、JavaScript など) から使用できるようにする必要があるためだと思います。
したがって、クラスがある場合、クラスの使用の 1 つはそれを新しいクラスにオーバーライドすることです。別の言語で行われるクラスをオーバーライドしたい場合があります。しかし、これは問題です。C# で行われた基本クラスを、C++ で行われた継承クラスによってどのようにオーバーライドしますか? どちらも完全に異なり、互換性のない OOP 実装を持っているため、これは決して機能しません。
公開されたクラスを強制的に封印することで、この問題を取り除き、人々がこのようなことをしようとしないようにします。
これ以外にももっと根本的なことがあると思いますが、これが最初に頭に浮かびました。