Почему типы WinRT должны быть запечатаны?

В нескольких местах (например, Создание компонентов Runtime для JavaScript, на С# и Visual Basic" на MSDN), я видел, что он указал, что если вы напишите класс в .NET, который вы хотите использовать из JavaScript, тогда вы должны сделать его закрытым классом.

Это кажется произвольным ограничением. Почему JavaScript работает только с закрытыми классами?

Ответ 1

Объекты среды Windows, подверженные приложениям JavaScript, запечатаны с точки зрения JavaScript - вы не можете добавлять свойства expando к объектам WinRT. Но из С++ и С# объекты winrt могут быть наследованы, если объект поддерживает наследование (большинство классов Xaml поддерживают наследование, например, но большинство других нет).

Причина, по которой объекты WinRT запечатываются из JS, заключается в том, чтобы гарантировать, что объект winrt будет вести себя одинаково независимо от того, что сделало приложение - если приложение переопределяет какое-либо свойство функции на объекте, это может привести к тому, что другие части приложения будут безобразничать.