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:oldSyntax
polecenia , 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