C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#で現在のTypeが実装・継承しているすべてのインターフェイスを取得する方法

C#では、Type.GetInterfaces()メソッドを使うことで、現在のTypeが直接・間接的に実装または継承しているすべてのインターフェイスを一括して取得できます。このメソッドは、該当するインターフェイスをType[]配列として返します。また、特定のインターフェイスだけを取得したい場合は、GetInterface()メソッドを使用します。

サンプルコード1:float型のインターフェイスを取得する

まずは、float型が実装しているすべてのインターフェイスを取得する例を見てみましょう。

using System;
public class Demo {
   public static void Main() {
      Type type = typeof(float);
      // 特定のインターフェイス(IFormattable)を取得
      Type myInterface = type.GetInterface("IFormattable", true);
      // すべてのインターフェイスを取得
      Type[] myInterfaces = type.GetInterfaces();
      Console.WriteLine("Interface = " + myInterface);
      Console.WriteLine("All the Interfaces...");
      for (int i = 0; i < myInterfaces.Length; i++)
         Console.WriteLine("" + myInterfaces[i]);
   }
}

実行結果

上記のコードを実行すると、次のような出力が得られます。

Interface = System.IFormattable
All the Interfaces...
System.IComparable
System.IFormattable
System.IConvertible
System.IComparable`1[System.Single]
System.IEquatable`1[System.Single]

この結果から、float型がIComparableIFormattableIConvertible、さらにジェネリック版のIComparable<Single>IEquatable<Single>を実装していることがわかります。

サンプルコード2:int型のインターフェイスを取得する

続いて、int型に対して同じ処理を行う例です。ここではGetInterface()メソッドに大文字小文字を区別しない検索(ignoreCaseを省略)を用いています。

using System;
public class Demo {
   public static void Main() {
      Type type = typeof(int);
      // 特定のインターフェイス(IFormattable)を取得
      Type myInterface = type.GetInterface("IFormattable");
      // すべてのインターフェイスを取得
      Type[] myInterfaces = type.GetInterfaces();
      Console.WriteLine("Interface = " + myInterface);
      Console.WriteLine("All the Interfaces...");
      for (int i = 0; i < myInterfaces.Length; i++)
         Console.WriteLine("" + myInterfaces[i]);
   }
}

実行結果

このコードを実行すると、以下の出力が得られます。

Interface = System.IFormattable
All the Interfaces...
System.IComparable
System.IFormattable
System.IConvertible
System.IComparable`1[System.Int32]
System.IEquatable`1[System.Int32]

ポイント解説

  • GetInterfaces():現在のTypeが実装・継承しているすべてのインターフェイスをType[]配列として返します。該当するものがない場合は空の配列を返します。
  • GetInterface(string name):指定した名前のインターフェイスを1つだけ検索して返します。見つからない場合はnullを返します。第2引数にtrueを渡すと、大文字小文字を区別せずに検索できます。

このように、リフレクションを活用することで、型が持つインターフェイス情報を実行時に動的に調べることが可能になります。プラグイン機構の実装や、特定の機能を持つ型の判定など、さまざまな場面で役立つテクニックです。

  1. C#で現在のインスタンスの型を取得する方法(GetTypeメソッド)

    C#でオブジェクトの現在のインスタンスの型(実行時の型)を取得するには、GetType()メソッドを使用します。このメソッドはすべての型の基底クラスであるSystem.Objectに定義されており、呼び出し元インスタンスの正確な型をSystem.Typeオブジェクトとして返します。 GetType()メソッドの基本 GetType()はインスタンスに対して呼び出すことで、その実行時の型情報を取得できます。戻り値であるTypeオブジェクトをそのまま文字列連結して出力すると、「System.String」や「System.Int32」のような完全修飾型名が表示されます。 例1:string型のイン

  2. C#で列挙型(Enum)の型を取得する方法

    C#で列挙型(Enum)の型情報を取得するには、GetType()メソッドを使用します。この記事では、実際のコード例を通じて、列挙型の型名や基になる型(Underlying Type)の取得方法をわかりやすく解説します。 列挙型の準備 まず、複数の列挙型の値を格納した配列を用意します。ここでは、.NET標準ライブラリに含まれる ConsoleColor と DayOfWeek の2つの列挙型を使用します。 Enum[] values = { ConsoleColor.Blue, DayOfWeek.Sunday}; GetType()メソッドで型を取得する 列挙値の型を取得するには、各値