我想为我的所有视图模型创建一个抽象基类,但是我遇到了可访问性问题,似乎无法浏览错误。这是我的代码示例:
public ref class ViewModelBase {
...
}
public ref class OtherViewModel : ViewModelBase {
...
}
当我将代码定义为上述状态时,我收到以下错误:
错误C4585:'MyNamespace :: ViewModelBase':WinRT'公共引用类'必须密封或从现有的未密封类派生
相反,如果我将ViewModelBase设为私有,则会出现此错误:
错误C3213:基类“MyNamespace :: ViewModelBase”的访问权限低于“OtherViewModel”
这看起来应该非常简单。我做错了什么?
答案 0 :(得分:5)
在C ++ / CX中,您所尝试的内容并不严格,因为在VS 2012中,C ++ / CX不支持通用方案的公共类继承。仅支持XAML场景才能工作;唯一可能的公开未密封类型是在Windows::UI::Xaml
命名空间下找到的类型,用户无法创建自己的公开未密封类型。
如果您想拥有所有视图模型的基类,那么您唯一的选择就是将所有类设为私有或继承自Windows::UI::Xaml
的基类(例如DependencyObject
)。< / p>
这些方法中的每一种都有缺点:
[Bindable]
属性进行数据绑定,因此您需要拥有私有数据绑定实现。 (您的私人课程需要实现ICustomPropertyProvider
及相关接口。)答案 1 :(得分:-1)
“sealed”关键字表示无法继承该类。您的实现应该如下所示:
ref class ViewModelBase sealed
如果你想从ViewModelBase继承,那么你只需要像这样的子类是ref
类:
class ViewModelBase
...
public ref class OtherViewModel sealed : ViewModelBase