sealed(C++ 组件扩展)
sealed 是指示的上下文相关关键字虚拟成员不能重写,或类型不能用作基类型。
备注
ISO C++11 标准语言都有 最终 标识符,在 Visual Studio 支持。使用 final 而不是 sealed 在被视为编译为本机代码。
所有运行时
语法
ref class identifier sealed {...};
virtual return-type identifier() sealed {...};
参数
标识符
函数或选件类的名称。返回类型
由函数返回的类型。
备注
在第一个语法示例中,选件类是密封的。 在第二个示例中,虚函数是密封的。
sealed 关键字是有效的本机目标,并在 Windows 运行时 和公共语言运行时 (CLR) 中。 有关更多信息,请参见 重写说明符和本机编译。
可以检测在编译时类型使用 __is_sealed (type) 类型特征,是否是密封的。 有关更多信息,请参见编译器支持类型特征(C++ 组件扩展)。
sealed 是上下文相关关键字。 有关更多信息,请参见上下文相关的关键字(C++ 组件扩展)。
Windows 运行时
(不是仅适用于 Windows 运行时)。此语言功能的备注
要求
编译器选项:/ZW
公共语言运行时
(不是仅适用于公共语言运行时)。此语言功能的备注
要求
编译器选项:/clr
示例
下面的代码示例演示 sealed 的效果虚拟成员。
// sealed_keyword.cpp
// compile with: /clr
interface struct I1 {
virtual void f();
virtual void g();
};
ref class X : I1 {
public:
virtual void f() {
System::Console::WriteLine("X::f override of I1::f");
}
virtual void g() sealed {
System::Console::WriteLine("X::f override of I1::g");
}
};
ref class Y : public X {
public:
virtual void f() override {
System::Console::WriteLine("Y::f override of I1::f");
}
/*
// the following override generates a compiler error
virtual void g() override {
System::Console::WriteLine("Y::g override of I1::g");
}
*/
};
int main() {
I1 ^ MyI = gcnew X;
MyI -> f();
MyI -> g();
I1 ^ MyI2 = gcnew Y;
MyI2 -> f();
}
Output
下面的代码示例演示如何标记选件类为密封类。
// sealed_keyword_2.cpp
// compile with: /clr
interface struct I1 {
virtual void f();
};
ref class X sealed : I1 {
public:
virtual void f() override {}
};
ref class Y : public X { // C3246 base class X is sealed
public:
virtual void f() override {}
};