0Pricing
C# Academy · レッスン

C#のリフレクションを理解する

リフレクションを使って実行時にオブジェクトを調査、操作します

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

リフレクションの概要

C# のリフレクションを理解する

次のレッスンへようこそ!このレッスンでは、実行時に型やオブジェクトを調査して操作できる強力な機能、C#のリフレクションについて学びます。さっそく始めましょう!

C#のリフレクションを理解する — イラスト1

リフレクションとは

リフレクションとは

リフレクションとは、プログラムが実行時に自身の構造を調査して操作する機能です。一般的に次の用途で使用されます。

  • 型、メソッド、プロパティに関するメタデータへのアクセス。
  • メソッドの動的な呼び出しやフィールドへのアクセス。
  • シリアライザーや ORM などのフレームワークやツールの構築。

重要なポイント:リフレクションはSystem.Reflection名前空間の一部です。

型情報へのアクセス

型情報へのアクセス

型に関するメタデータにアクセスするには、Typeクラスを使用します。例:

ヒント:型のメンバーを調査するには、GetProperties、GetMethods、GetFieldsを使用します。

using System;

class SampleClass {
    public int Id { get; set; }
    public string Name { get; set; }
}

class Program {
    static void Main() {
        Type type = typeof(SampleClass);

        Console.WriteLine("Type Name: " + type.Name);
        Console.WriteLine("Properties:");
        foreach (var prop in type.GetProperties()) {
            Console.WriteLine("- " + prop.Name);
        }
    }
}

オブジェクトの動的な作成

オブジェクトの動的な作成

リフレクションを使うと、クラスのインスタンスを動的に作成できます。例:

重要なポイント:実行時にオブジェクトを作成するには、Activator.CreateInstanceを使用します。

using System;

class SampleClass {
    public string Name { get; set; }
}

class Program {
    static void Main() {
        Type type = typeof(SampleClass);
        object instance = Activator.CreateInstance(type);

        var property = type.GetProperty("Name");
        property.SetValue(instance, "Reflection Example");

        Console.WriteLine("Name: " + property.GetValue(instance));
    }
}

メソッドの動的な呼び出し

メソッドの動的な呼び出し

リフレクションを使うと、コンパイル時にメソッドの内容がわからなくても、実行時にメソッドを呼び出せます。例:

ヒント:メソッドを動的に呼び出すには、GetMethodとInvokeを使用します。

using System;

class SampleClass {
    public void Greet(string name) {
        Console.WriteLine("Hello, " + name);
    }
}

class Program {
    static void Main() {
        Type type = typeof(SampleClass);
        object instance = Activator.CreateInstance(type);

        var method = type.GetMethod("Greet");
        method.Invoke(instance, new object[] { "World" });
    }
}

属性の操作

属性の操作

リフレクションを使って、型、メソッド、プロパティに適用されたカスタム属性を調査できます。例:

重要なポイント:属性の情報を取得するには、GetCustomAttributesを使用します。

using System;

[AttributeUsage(AttributeTargets.Class)]
class SampleAttribute : Attribute {
    public string Description { get; }
    public SampleAttribute(string description) {
        Description = description;
    }
}

[Sample("This is a sample class.")]
class SampleClass {}

class Program {
    static void Main() {
        Type type = typeof(SampleClass);
        var attributes = type.GetCustomAttributes(typeof(SampleAttribute), false);

        foreach (SampleAttribute attr in attributes) {
            Console.WriteLine("Description: " + attr.Description);
        }
    }
}

練習課題

練習課題

リフレクションを使ってクラスを調査し、そのメソッドとプロパティを一覧表示してから、メソッドの1つを動的に呼び出すプログラムを作成してください。例:

using System;

class SampleClass {
    public int Add(int a, int b) {
        return a + b;
    }
}

class Program {
    static void Main() {
        Type type = typeof(SampleClass);
        Console.WriteLine("Methods:");
        foreach (var method in type.GetMethods()) {
            Console.WriteLine("- " + method.Name);
        }

        object instance = Activator.CreateInstance(type);
        var addMethod = type.GetMethod("Add");
        int result = (int)addMethod.Invoke(instance, new object[] { 5, 3 });

        Console.WriteLine("Result of Add: " + result);
    }
}

リフレクション使用時のベストプラクティス

リフレクション使用時のベストプラクティス

ここでは、いくつかのベストプラクティスを紹介します。

  • リフレクションはパフォーマンスに影響する可能性があるため、必要最小限に使用します。
  • 繰り返し呼び出す際の効率を高めるため、リフレクションの結果をキャッシュします。
  • 可能な場合は、リフレクションよりもコンパイル時に解決できる方法を優先します。
  • プラグインやフレームワークなど、動的な処理が必要な場面でリフレクションを使用します。

ヒント:柔軟で動的なアプリケーションを実現するため、リフレクションをカスタム属性と組み合わせます。

よくできました!

よくできました!

おめでとうございます!C#でリフレクションを使って、実行時に型を調査して操作する方法を学びました。これで「高度な C# 機能」カテゴリは終了です。次のコーディングの冒険へ進みましょう!

C#のリフレクションを理解する — イラスト10

よくある質問

「C#のリフレクションを理解する」レッスンは無料ですか?

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

「C#のリフレクションを理解する」で何を学びますか?

リフレクションを使って実行時にオブジェクトを調査、操作します ブラウザで直接実行するハンズオンコードでC# Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「C#のリフレクションを理解する」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. C#のジェネリクス
  2. AsyncとAwait:非同期コードを扱う
  3. スレッドとタスクを理解する
  4. デリゲートとラムダを探る
  5. C#のリフレクションを理解する
← C# Academyに戻る