已密封(C++ 组件扩展)

sealed 是 ref 类的上下文相关关键字,它指示某个虚拟成员不能被替代,或某个类型不能用作基类型。

备注

ISO C++11 标准语言具有 final 关键字,它在 Visual Studio 中受到支持。在标准类上使用 final,在 ref 类上使用 sealed。

所有运行时

语法

ref class identifier sealed {...};
virtual return-type identifier() sealed {...};

参数

  • 标识符
    函数或类的名称。

  • 返回类型
    函数返回的类型。

备注

在第一个语法示例中,密封了类。 在第二个示例中,密封了虚函数。

sealed 关键字对于本机目标有效,它同时对于 Windows 运行时 和公共语言运行时 (CLR) 有效。 有关详细信息,请参阅“替代说明符和本机编译”

你可以检测到是否在编译时使用 __is_sealed (type) 类型特征密封了某个类型。 有关详细信息,请参阅编译器支持类型特征(C++ 组件扩展)

sealed 是上下文相关的关键字。 有关详细信息,请参阅上下文相关的关键字(C++ 组件扩展)

Windows 运行时

请参阅“Ref 类和结构”

要求

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

输出

              
                 
              
              
              
                 
              
              
              
                
              
            

下一个代码示例演示如何将类标记为已密封。

// 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 {}
};

请参见

概念

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