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 运行时)。此语言功能的备注

0w2w91tf.collapse_all(zh-cn,VS.110).gif要求

编译器选项:/ZW

公共语言运行时

(不是仅适用于公共语言运行时)。此语言功能的备注

0w2w91tf.collapse_all(zh-cn,VS.110).gif要求

编译器选项:/clr

0w2w91tf.collapse_all(zh-cn,VS.110).gif示例

下面的代码示例演示 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 {}
};

请参见

概念

适用于运行时平台的组件扩展