0Pricing
C# Academy · レッスン

Type、MethodInfo、アクティベーション、カスタム属性

Typeオブジェクトを取得し、MethodInfoを検索し、メソッドを呼び出し、Activatorでインスタンスを作成し、カスタム属性を定義・読み取ります。

「Type、MethodInfo、アクティベーション、カスタム属性」はCoddyKit上の無料C# Academyレッスンです。 これはレッスン1/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC# Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C# Academyコースには全3レッスンが含まれています。

概要

目標: リフレクションを安全に使います。

  • Typeを取得します
  • MethodInfoを探します
  • Activatorで作成します
  • 属性を定義して読み取ります

Typeの取得

typeof、インスタンスのGetType()、またはType.GetTypeで名前を指定してTypeを取得します。

using System;

public class Sample { }

public class Program
{
  public static void Main(string[] args)
  {
    // 1) From a compile-time type
    Type t1 = typeof(Sample);

    // 2) From an instance
    Sample s = new Sample();
    Type t2 = s.GetType();

    // 3) From a full name (needs assembly-qualified name for external types)
    Type t3 = Type.GetType("System.String");

    Console.WriteLine(t1.Name + ", " + t2.FullName + ", " + (t3 == null ? "null" : t3.Name));
  }
}

MethodInfo.Invoke

GetMethodでメソッドを探し、Invokeで呼び出します。インスタンスと引数配列を渡します。

using System;
using System.Reflection;

public class Greeter
{
  public string Hello(string name) { return "Hello, " + name; }
}

public class Program
{
  public static void Main(string[] args)
  {
    Greeter g = new Greeter();
    Type t = typeof(Greeter);

    MethodInfo mi = t.GetMethod("Hello"); // public instance method
    object result = mi.Invoke(g, new object[] { "Ada" }); // call dynamically

    Console.WriteLine(result); // Hello, Ada
  }
}

Activatorの基礎

Activator.CreateInstance(Type) は、public な引数なしコンストラクターを使用してオブジェクトを構築します。

using System;

public class Person
{
  public string Name { get; set; }
  public Person() { Name = "Unknown"; } // parameterless ctor
}

public class Program
{
  public static void Main(string[] args)
  {
    Type tp = typeof(Person);
    object o = Activator.CreateInstance(tp); // uses public parameterless ctor
    Person p = (Person)o;
    p.Name = "Alan";
    Console.WriteLine("Created: " + p.Name);
  }
}

カスタム属性

小さな Attribute クラスを作成し、型またはメソッドに対して GetCustomAttributes を呼び出して取得します。

using System;
using System.Reflection;

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public sealed class LabelAttribute : Attribute
{
  public string Text { get; private set; }
  public LabelAttribute(string text) { Text = text; }
}

[Label("Utility class")]
public class Utils
{
  [Label("Adds two ints")]
  public static int Add(int a, int b) { return a + b; }
}

public class Program
{
  public static void Main(string[] args)
  {
    Type t = typeof(Utils);

    // Read class attribute
    object[] classAttrs = t.GetCustomAttributes(typeof(LabelAttribute), false);
    if (classAttrs.Length > 0)
      Console.WriteLine("Class label: " + ((LabelAttribute)classAttrs[0]).Text);

    // Read method attribute
    MethodInfo mi = t.GetMethod("Add");
    object[] methodAttrs = mi.GetCustomAttributes(typeof(LabelAttribute), false);
    if (methodAttrs.Length > 0)
      Console.WriteLine("Method label: " + ((LabelAttribute)methodAttrs[0]).Text);
  }
}

ヒントと安全上の注意

ヒント:

  • Type.GetType から返される null と、見つからないメンバーを確認します。
  • 可能な場合は typeof を優先します(高速で安全です)。
  • リフレクションの使用箇所を集約し、十分にドキュメント化します。
  • 非公開メンバーや静的メンバーを検索するには BindingFlags を使用します。

インスタンス生成の基礎

確認問題: 公開された引数なしコンストラクターを持つ Type からインスタンスを作成する API はどれですか。

まとめ

まとめ: Type を取得し、MethodInfo を検索し、Activator でインスタンスを作成し、GetCustomAttributes を使用して属性を読み取ります。

よくある質問

「Type、MethodInfo、アクティベーション、カスタム属性」レッスンは無料ですか?

はい。「Type、MethodInfo、アクティベーション、カスタム属性」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C# Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C# Academyコースには全3レッスンが含まれています。

「Type、MethodInfo、アクティベーション、カスタム属性」で何を学びますか?

Typeオブジェクトを取得し、MethodInfoを検索し、メソッドを呼び出し、Activatorでインスタンスを作成し、カスタム属性を定義・読み取ります。 ブラウザで直接実行するハンズオンコードでC# Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

C# Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのC# Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/3です。

「Type、MethodInfo、アクティベーション、カスタム属性」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このC# Academyレッスンでコードを書いて実行できますか?

はい。すべてのC# Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Type、MethodInfo、アクティベーション、カスタム属性
  2. ソースレベルの情報(Caller属性)
  3. 軽量なメタプログラミングのシナリオ
← C# Academyに戻る