密封(C++/CLI 和 C++/CX)
sealed 是 ref class 的上下文相关关键字,它指明无法重写虚成员,或类型无法用作基类型。
注意
ISO C++ 11 标准语言引入了 final 关键字。 对标准类使用 final,并对 ref class 使用 sealed。
所有运行时
语法
ref class identifier sealed {...};
virtual return-type identifier() sealed {...};
参数
identifier
函数或类的名称。
return-type
函数返回的类型。
备注
在第一个语法示例中,密封了类。 在第二个示例中,密封了虚函数。
对 ref class 及其虚成员函数使用 sealed 关键字。 有关详细信息,请参阅重写说明符和本机编译。
在编译时,可以使用 __is_sealed(type)
类型特征来检测类型是否已密封。 有关详细信息,请参阅编译器对类型特征的支持。
sealed 是上下文相关关键字。 有关详细信息,请参阅上下文相关关键字。
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();
}
X::f override of I1::f
X::f override of I1::g
Y::f override of I1::f
下一个代码示例演示如何将类标记为已密封。
// 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 {}
};