Windows 运行时组件中不可能继承?
Inheritance impossible in Windows Runtime Component?
场景:
我的 Windows 运行时组件项目中有 3 classes (A,B,C)。
class A{}
public sealed class B : A {}
public sealed class C : A {}
编译上述代码时,我得到以下 错误:
"Inconsistent accessibility: base class 'A' is less accessible than
class 'C'."
如果我将 class 设为 public,它会出现 编译错误 :
"Exporting unsealed types is not supported. Please mark type
'MyProject.A' as sealed."
但是现在,如果我把A设为sealed,那么B和C就不能继承了。
考虑到只允许继承 WinRT 类型这一事实,是否可以使用 custom/user-defined classes 进行继承?如果没有,是否有任何解决方法来实现相同的目标?
正如您自己发现的那样,您不能在 Windows 运行时组件中公开从其他人继承的 classes;即使您尝试使用抽象 class 作为父级 class,也是如此。
这是使 WinRT 组件与 WinRT 框架支持的所有其他语言一起工作所需的 "drawback"。
解决此问题的唯一方法是避免继承。
您只能在可以模拟继承行为的地方使用接口或对象组合,例如:
public sealed class A
{
public void Method() { }
}
public sealed class B
{
A a;
public void Method()
{
// Do B stuff
// Call fake "virtual" method
a.Method();
}
}
场景:
我的 Windows 运行时组件项目中有 3 classes (A,B,C)。
class A{}
public sealed class B : A {}
public sealed class C : A {}
编译上述代码时,我得到以下 错误:
"Inconsistent accessibility: base class 'A' is less accessible than class 'C'."
如果我将 class 设为 public,它会出现 编译错误 :
"Exporting unsealed types is not supported. Please mark type 'MyProject.A' as sealed."
但是现在,如果我把A设为sealed,那么B和C就不能继承了。
考虑到只允许继承 WinRT 类型这一事实,是否可以使用 custom/user-defined classes 进行继承?如果没有,是否有任何解决方法来实现相同的目标?
正如您自己发现的那样,您不能在 Windows 运行时组件中公开从其他人继承的 classes;即使您尝试使用抽象 class 作为父级 class,也是如此。 这是使 WinRT 组件与 WinRT 框架支持的所有其他语言一起工作所需的 "drawback"。 解决此问题的唯一方法是避免继承。 您只能在可以模拟继承行为的地方使用接口或对象组合,例如:
public sealed class A
{
public void Method() { }
}
public sealed class B
{
A a;
public void Method()
{
// Do B stuff
// Call fake "virtual" method
a.Method();
}
}