Condividi tramite


Override espliciti (C++/CLI e C++/CX)

Questo argomento descrive come eseguire l'override esplicito di un membro di una classe base o di un'interfaccia di base. Un override denominato (esplicito) deve essere usato solo per eseguire l'override di un metodo con un metodo derivato che ha un nome diverso.

Tutti i runtime

Sintassi

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

Parametri

overriding-function-declarator
Elenco di tipi, nomi e argomenti restituiti della funzione di override. Si noti che la funzione di override non deve avere lo stesso nome della funzione sottoposta a override.

type
Tipo di base che contiene una funzione di cui eseguire l'override.

function
Elenco delimitato da virgole di uno o più nomi di funzione di cui eseguire l'override.

overriding-function-definition
Istruzioni del corpo della funzione che definiscono la funzione di override.

Osservazioni:

Usare sostituzioni esplicite per creare un alias per una firma del metodo o per fornire implementazioni diverse per i metodi con la stessa firma.

Per informazioni sulla modifica del comportamento di tipi ereditati e membri di tipi ereditati, vedere Identificatori di override.

Windows Runtime

Requisiti

Opzione del compilatore: /ZW

Common Language Runtime

Osservazioni:

Per informazioni sugli override espliciti in codice nativo o codice compilato con /clr:oldSyntax, vedere Override espliciti.

Requisiti

Opzione del compilatore: /clr

Esempi

L'esempio di codice seguente mostra un semplice override implicito e l'implementazione di un membro in un'interfaccia di base, senza usare override espliciti.

// 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

L'esempio di codice seguente mostra come implementare tutti i membri di interfaccia con una firma comune, usando la sintassi degli override espliciti.

// 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

L'esempio di codice seguente mostra in che modo l'override di una funzione può avere un nome diverso dalla funzione implementata.

// 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

L'esempio di codice seguente mostra un'implementazione esplicita dell'interfaccia che implementa una raccolta indipendente dai tipi.

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

Vedi anche

Estensioni componenti per .NET e UWP