密封(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 运行时

请参阅 ref class 和 ref struct

要求

编译器选项:/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 {}
};

另请参阅

.NET 和 UWP 的组件扩展