new(vtable 中的新槽)(C++/CLI 和 C++/CX)

new 关键字指明,虚成员将在 vtable 中获取新槽。

所有运行时

(此语言功能没有适用于所有运行时的备注。)

Windows 运行时

Windows 运行时不支持此功能。

公共语言运行时

备注

/clr 编译中,new 指明,虚成员将在 vtable 中获取新槽;且函数不重写基类方法。

new 导致 newslot 修饰符被添加到函数的 IL 中。 若要详细了解 newslot,请参阅:

要求

编译器选项:/clr

示例

下面的示例展示了 new 的效果。

// newslot.cpp
// compile with: /clr
ref class C {
public:
   virtual void f() {
      System::Console::WriteLine("C::f() called");
   }

   virtual void g() {
      System::Console::WriteLine("C::g() called");
   }
};

ref class D : public C {
public:
   virtual void f() new {
      System::Console::WriteLine("D::f() called");
   }

   virtual void g() override {
      System::Console::WriteLine("D::g() called");
   }
};

ref class E : public D {
public:
   virtual void f() override {
      System::Console::WriteLine("E::f() called");
   }
};

int main() {
   D^ d = gcnew D;
   C^ c = gcnew D;

   c->f();   // calls C::f
   d->f();   // calls D::f

   c->g();   // calls D::g
   d->g();   // calls D::g

   D ^ e = gcnew E;
   e->f();   // calls E::f
}
C::f() called

D::f() called

D::g() called

D::g() called

E::f() called

另请参阅

.NET 和 UWP 的组件扩展
重写说明符