明示的なオーバーライド (C++/CLI および C++/CX)Explicit Overrides (C++/CLI and C++/CX)

このトピックでは、基底クラスまたはインターフェイスのメンバーを明示的にオーバーライドする方法について説明します。This topic discusses how to explicitly override a member of a base class or interface. 名前付きの (明示的な) オーバーライドは、別の名前を持つ派生メソッドを使用してメソッドをオーバーライドするためにのみ使用する必要があります。A named (explicit) override should only be used to override a method with a derived method that has a different name.

すべてのランタイムAll Runtimes

構文Syntax

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

パラメーターParameters

overriding-function-declaratoroverriding-function-declarator
オーバーライドする関数の戻り値の型、名前、および引数リスト。The return type, name, and argument list of the overriding function. オーバーライドする関数に、オーバーライドされる関数と同じ名前があってはならないことに注意してください。Note that the overriding function does not have to have the same name as the function being overridden.

typetype
オーバーライドする関数を含む基本型。The base type that contains a function to override.

functionfunction
オーバーライドする 1 つまたは複数の関数の名前のコンマ区切りのリスト。A comma-delimited list of one or more function names to override.

overriding-function-definitionoverriding-function-definition
オーバーライドする関数を定義する関数の本体ステートメント。The function body statements that define the overriding function.

解説Remarks

明示的なオーバーライドを使用して、メソッドのシグネチャのエイリアスを作成するか、同じシグネチャでメソッドの異なる実装を行います。Use explicit overrides to create an alias for a method signature, or to provide different implementations for methods witht the same signature.

継承された型と継承された型のメンバーの動作を変更する方法の詳細については、「オーバーライド指定子」を参照してください。For information about modifying the behavior of inherited types and inherited type members, see Override Specifiers.

Windows ランタイムWindows Runtime

要件Requirements

コンパイラ オプション: /ZWCompiler option: /ZW

共通言語ランタイムCommon Language Runtime

解説Remarks

ネイティブ コードまたは /clr:oldSyntax でコンパイルされたコードでの明示的なオーバーライドについては、「明示的なオーバーライド」を参照してください。For information about explicit overrides in native code or code compiled with /clr:oldSyntax, see Explicit Overrides.

要件Requirements

コンパイラ オプション: /clrCompiler option: /clr

使用例Examples

次のコード例では、基本インターフェイスでの単純で暗黙的なオーバーライドとメンバーの実装を示します。ここでは明示的なオーバーライドは使用されていません。The following code example shows a simple, implicit override and implementation of a member in a base interface, not using explicit overrides.

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

次のコード例では、明示的なオーバーライド構文を使用して、すべてのインターフェイス メンバーを一般的なシグネチャで実装する方法を示します。The following code example shows how to implement all interface members with a common signature, using explicit override syntax.

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

次のコード例では、関数のオーバーライドで、それが実装する関数とは異なる名前を持つ方法を示します。The following code example shows how a function override can have a different name from the function it is implementing.

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

次のコード例では、タイプ セーフ コレクションを実装する明示的なインターフェイスの実装を示します。The following code example shows an explicit interface implementation that implements a type safe collection.

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

関連項目See also

.NET および UWP でのコンポーネント拡張Component Extensions for .NET and UWP