Açık Geçersiz Kılmalar (C++/CLI ve C++/CX)

Bu konu başlığında, bir temel sınıfın veya arabirimin üyesini açıkça nasıl geçersiz kılılacağı açıklanmaktadır. Adlandırılmış (açık) geçersiz kılma yalnızca farklı bir ada sahip türetilmiş bir yöntemle bir yöntemi geçersiz kılmak için kullanılmalıdır.

Tüm Çalışma Zamanları

Sözdizimi

overriding-function-declarator = type::function [,type::function] { overriding-function-definition }
overriding-function-declarator = function { overriding-function-definition }

Parametreler

overriding-function-declarator
Geçersiz kılma işlevinin dönüş türü, adı ve bağımsız değişken listesi. Geçersiz kılma işlevinin geçersiz kılınan işlevle aynı ada sahip olması gerekmediğini unutmayın.

type
Geçersiz kılınacak bir işlev içeren temel tür.

Işlev
Geçersiz kılınacak bir veya daha fazla işlev adının virgülle ayrılmış listesi.

geçersiz kılma-işlev-tanımı
Geçersiz kılma işlevini tanımlayan işlev gövdesi deyimleri.

Açıklamalar

Bir yöntem imzası için diğer ad oluşturmak veya aynı imzaya sahip yöntemler için farklı uygulamalar sağlamak için açık geçersiz kılmaları kullanın.

Devralınan türlerin ve devralınan tür üyelerinin davranışını değiştirme hakkında bilgi için bkz . Geçersiz Kılma Tanımlayıcıları.

Windows Çalışma Zamanı

Gereksinimler

Derleyici seçeneği: /ZW

Ortak Dil Çalışma Zamanı

Açıklamalar

Yerel koddaki veya ile /clr:oldSyntaxderlenen koddaki açık geçersiz kılmalar hakkında bilgi için bkz . Açık Geçersiz Kılmalar.

Gereksinimler

Derleyici seçeneği: /clr

Örnekler

Aşağıdaki kod örneği, açık geçersiz kılmaları kullanmayan temel arabirimdeki bir üyenin basit, örtük bir geçersiz kılmasını ve uygulamasını gösterir.

// explicit_override_1.cpp
// compile with: /clr
interface struct I1 {
   virtual void f();
};

ref class X : public I1 {
public:
   virtual void f() {
      System::Console::WriteLine("X::f override of I1::f");
   }
};

int main() {
   I1 ^ MyI = gcnew X;
   MyI -> f();
}
X::f override of I1::f

Aşağıdaki kod örneğinde, açık geçersiz kılma söz dizimi kullanılarak ortak imzaya sahip tüm arabirim üyelerinin nasıl uygulanacakları gösterilmektedir.

// explicit_override_2.cpp
// compile with: /clr
interface struct I1 {
   virtual void f();
};

interface struct I2 {
   virtual void f();
};

ref struct X : public I1, I2 {
   virtual void f() = I1::f, I2::f {
      System::Console::WriteLine("X::f override of I1::f and I2::f");
   }
};

int main() {
   I1 ^ MyI = gcnew X;
   I2 ^ MyI2 = gcnew X;
   MyI -> f();
   MyI2 -> f();
}
X::f override of I1::f and I2::f
X::f override of I1::f and I2::f

Aşağıdaki kod örneği, bir işlev geçersiz kılma işleminin uyguladığı işlevden farklı bir ada sahip olabileceğini gösterir.

// explicit_override_3.cpp
// compile with: /clr
interface struct I1 {
   virtual void f();
};

ref class X : public I1 {
public:
   virtual void g() = I1::f {
      System::Console::WriteLine("X::g");
   }
};

int main() {
   I1 ^ a = gcnew X;
   a->f();
}
X::g

Aşağıdaki kod örneği, tür güvenli koleksiyonu uygulayan açık bir arabirim uygulamasını gösterir.

// explicit_override_4.cpp
// compile with: /clr /LD
using namespace System;
ref class R : ICloneable {
   int X;

   virtual Object^ C() sealed = ICloneable::Clone {
      return this->Clone();
   }

public:
   R() : X(0) {}
   R(int x) : X(x) {}

   virtual R^ Clone() {
      R^ r = gcnew R;
      r->X = this->X;
      return r;
   }
};

Ayrıca bkz.

.NET ve UWP İçin Bileşen Uzantıları