Я экспериментирую с созданием простого приложения xaml с использованием C ++ / WinRT.
Я пришел из фона WPF, где довольно часто бывает базовый класс, реализующий INotifyPropertyChanged, и другие классы наследуются от него.
Когда я пытаюсь сделать то же самое с C ++ - WinRT, я выхожу из строя с ошибкой
error MIDL4006: [msg]A runtime class can derive only from a composable runtime class.
Вот остальная часть соответствующего кода для справки:
ObservableObject.idl:
namespace Example
{
runtimeclass ObservableObject : Windows.UI.Xaml.DependencyObject, Windows.UI.Xaml.Data.INotifyPropertyChanged
{
ObservableObject();
}
}
MainViewModel.idl:
import "ObservableObject.idl";
namespace Example
{
runtimeclass MainViewModel : ObservableObject
{
MainViewModel();
Int32 MyProperty;
}
}
Так что же такое составной класс среды выполнения? Есть ли способ добиться этого с помощью C ++ / WinRT? Я действительно не хочу повторять реализацию INotifyPropertyChanged каждый раз, когда я определяю новый связываемый класс.
sealed
, что означает, что они не могут быть производными от. Используйте ключевое словоunsealed
, чтобы ваш класс мог быть базовый класс. Композиция - это термин ABI для обозначения производных. - person Raymond Chen   schedule 28.07.2018