Udostępnij za pośrednictwem


Jawne zastąpienia (C++/CLI i C++/CX)

W tym temacie omówiono sposób jawnego zastępowania składowej klasy bazowej lub interfejsu. Przesłonięcia nazwane (jawne) powinny być używane tylko do zastępowania metody przy użyciu metody pochodnej o innej nazwie.

Wszystkie środowiska wykonawcze

Składnia

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

Parametry

zastępowanie deklaratora funkcji
Zwracany typ, nazwa i lista argumentów funkcji zastępowania. Należy pamiętać, że funkcja zastępowania nie musi mieć takiej samej nazwy, jak zastępowana funkcja.

type
Typ podstawowy, który zawiera funkcję do zastąpienia.

funkcja
Rozdzielana przecinkami lista co najmniej jednej nazwy funkcji do zastąpienia.

zastępowanie definicji funkcji
Instrukcje treści funkcji definiujące funkcję zastępowania.

Uwagi

Użyj jawnych przesłonięć, aby utworzyć alias dla sygnatury metody lub udostępnić różne implementacje metod z tym samym podpisem.

Aby uzyskać informacje na temat modyfikowania zachowania dziedziczych typów i dziedziczynych składowych typów, zobacz Zastępowanie specyfikatorów.

Środowisko wykonawcze systemu Windows

Wymagania

Opcja kompilatora: /ZW

środowiska uruchomieniowe w trakcie wykonania

Uwagi

Aby uzyskać informacje na temat jawnych przesłonięć w kodzie natywnym lub kodzie skompilowanym za pomocą /clr:oldSyntaxpolecenia , zobacz Jawne przesłonięcia.

Wymagania

Opcja kompilatora: /clr

Przykłady

Poniższy przykład kodu przedstawia proste, niejawne zastąpienie i implementację elementu członkowskiego w interfejsie podstawowym, a nie przy użyciu jawnych przesłonięć.

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

Poniższy przykład kodu pokazuje, jak zaimplementować wszystkie elementy członkowskie interfejsu ze wspólnym podpisem przy użyciu jawnej składni zastąpienia.

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

Poniższy przykład kodu pokazuje, jak przesłonięcia funkcji mogą mieć inną nazwę od implementowania funkcji.

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

Poniższy przykład kodu przedstawia jawną implementację interfejsu, która implementuje bezpieczną kolekcję typów.

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

Zobacz też

Rozszerzenia składników dla platformy .NET i platformy uniwersalnej systemu Windows