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

C#のType.GetDefaultMembers()メソッドとは?構文と使い方を解説

C#のType.GetDefaultMembers()メソッドは、現在のTypeに対して定義されているメンバーの中から、DefaultMemberAttributeが設定されたメンバーを検索するために使用されます。

リフレクションを利用して、型に既定のメンバーとして指定されたプロパティやメソッドを動的に取得したい場合に役立つメソッドです。

構文

public virtual System.Reflection.MemberInfo[] GetDefaultMembers ();

戻り値は、検索条件に一致するメンバー情報を格納した MemberInfo 型の配列です。該当するメンバーが存在しない場合は、空の配列が返されます。

それでは、Type.GetDefaultMembers()メソッドを実装した具体的な例を見ていきましょう。

サンプルコード1

using System;
using System.Reflection;
[DefaultMemberAttribute("subject")] public class Demo {
   public static void Main(){
      Type t = typeof(Demo);
      MemberInfo[] member = t.GetDefaultMembers();
      if (member.Length != 0){
         for (int i = 0; i < member.Length; i++)
         Console.WriteLine("{0}", member[i]);
      }
      else {
         Console.WriteLine("Default Member isn't there!");
      }
   }
   public void Name(String str) {}
   public String subject{
      get{
         return "Mathematics";
      }
   }
}

出力

このプログラムを実行すると、次のような出力が得られます。

System.String subject

この例では、Demo クラスに対して [DefaultMemberAttribute("subject")] を設定しているため、GetDefaultMembers() メソッドによって文字列型のプロパティ「subject」が取得されています。

続いて、別の例でも同じメソッドを試してみましょう。今度は整数型のプロパティを既定のメンバーとして指定します。

サンプルコード2

using System;
using System.Reflection;
[DefaultMemberAttribute("rank")] public class Demo {
   public static void Main(){
      Type t = typeof(Demo);
      MemberInfo[] member = t.GetDefaultMembers();
      if (member.Length != 0){
         for (int i = 0; i < member.Length; i++)
         Console.WriteLine("{0}", member[i]);
      }
      else {
         Console.WriteLine("Default Member isn't there!");
      }
   }
   public void Name(String str) {}
   public int rank{
      get{
         return 5;
      }
   }
}

出力

このプログラムを実行すると、次のような出力が得られます。

Int32 rank

このように、DefaultMemberAttribute で指定したメンバーの型や名前に関わらず、Type.GetDefaultMembers() メソッドを使えば、そのメンバー情報を MemberInfo 配列として簡単に取得できます。既定のメンバーが設定されていない場合は空の配列が返されるため、実行時に条件分岐を行うことで安全に処理できます。

  1. C#のType.Equals()メソッドとは?使い方とサンプルコードを解説

    C#のType.Equals()メソッドは、現在のTypeインスタンスが表す基盤となるシステム型が、指定されたObjectまたはTypeの基盤となるシステム型と同一であるかどうかを判定します。リフレクション処理などで型同士を比較したい場合に役立つメソッドです。 構文 public virtual bool Equals (Type o); public override bool Equals (object o); パラメータ o:現在のTypeの基盤となるシステム型と比較する対象となるオブジェクトまたは型を指定します。 戻り値 両方の基盤システム型が同じ場合は true、異なる場合は fa

  2. C#のタイプセーフ(型安全性)とは?仕組みと具体例をわかりやすく解説

    C#におけるタイプセーフ(型安全性)とは、あるオブジェクトが別のオブジェクトのメモリ領域に不正に侵入することを防ぐための重要な言語機能です。この仕組みによって、異なる型同士の不適切な操作がコンパイル段階で検出され、実行時エラーや予期しないバグを未然に防ぐことができます。ここでは、具体的なコード例を使ってタイプセーフの概念を詳しく見ていきましょう。コード例:2つのクラスを定義するまず、以下のように2つのクラス「One」と「Two」を定義します。public class One { public int Prop { get; set; } } public class Two {