C# では、オブジェクトのメソッドを実行する方法がいくつかあります。
1. メソッドの直接呼び出し: オブジェクトがあり、そのメソッド名とパラメーター リストがわかっている場合は、メソッドを直接呼び出すことができます。例えば:
MyClass obj = new MyClass();
obj.MyMethod("Hello World!");
2. リフレクション呼び出しメソッド: C# では、リフレクション メカニズムを使用してメソッドを呼び出すことができます。リフレクションは、プログラムが型のメタデータを検査、アクセス、変更し、型のメンバー (メソッド、プロパティ、フィールドなど) を実行時に動的に呼び出すことを可能にするメカニズムです。
以下は、リフレクションを使用してメソッドを呼び出す方法を示す簡単な例です。
class MyClass
{
public void MyMethod(string message)
{
Console.WriteLine(message);
}
}
class Program
{
static void Main(string[] args)
{
// 创建MyClass的实例
MyClass obj = new MyClass();
// 获取MyMethod方法的MethodInfo对象
MethodInfo methodInfo = typeof(MyClass).GetMethod("MyMethod");
// 准备调用方法时需要传递的参数
object[] parameters = { "Hello World!" };
// 调用MyMethod方法,并将参数传递给它
methodInfo.Invoke(obj, parameters);
}
}
上の例では、最初にMyClass
インスタンスが作成されますobj
。MyMethod
次に、メソッドのオブジェクトは、reflection を使用して取得されますMethodInfo
。次に、メソッドに渡されるパラメータをparameters
含む文字列型のパラメータ配列が準備されます。MyMethod
最後に、メソッドを使用してメソッドInvoke
が呼び出され、ターゲット オブジェクトとしてメソッド パラメータとして渡されます。MyMethod
obj
parameters
リフレクションを使用してメソッドを呼び出すと、実行時に型情報を取得してメソッド呼び出しを解決する必要があるため、プログラムのパフォーマンスが低下する可能性があることに注意してください。したがって、実際のプログラミングでは、プログラムのパフォーマンスを向上させるためにリフレクション呼び出しの数を最小限に抑える必要があります。
3. デリゲート呼び出しメソッド: C# では、デリゲート呼び出しメソッドを使用できます。デリゲートは 1 つ以上のメソッドをカプセル化する型で、それらのメソッドをパラメータとして他のメソッドに渡したり、変数に格納したりできるようにします。デリゲートによってカプセル化されたメソッドを呼び出す必要がある場合は、デリゲート自体を呼び出すだけで済みます。
以下は、デリゲートを使用してメソッドを呼び出す方法を示す簡単な例です。
delegate void MyDelegate(string message);
class MyClass
{
public void MyMethod(string message)
{
Console.WriteLine(message);
}
}
static void Main(string[] args)
{
// 创建MyClass的实例
MyClass obj = new MyClass();
// 创建委托实例并绑定到MyMethod方法
MyDelegate del = obj.MyMethod;
// 调用委托,会自动调用MyMethod方法
del("Hello World!");
}
MyDelegate
上記の例では、文字列型のパラメーターを受け取り void を返すメソッドをカプセル化するデリゲート型が定義されています。MyClass
次に、インスタンスが作成されobj
、そのメソッドがMyMethod
デリゲート インスタンスにdel
バインドされます。MyMethod
最後に、デリゲート インスタンスを呼び出して「Hello World!」をパラメータとして渡すことによって、メソッドが間接的に呼び出されます。
デリゲート型は、カプセル化されるメソッドと同じシグネチャを持つ必要があることに注意してください。つまり、パラメーター リストと戻り値の型の両方が一致する必要があります。さらに、デリゲートは非同期プログラミングやイベント処理などのシナリオでも使用できます。
これらのメソッドにはそれぞれ長所と短所があり、通常は実情に応じて最適なメソッドを選択して呼び出す必要があります。メソッドの名前とパラメータ リストがすでにわかっている場合は、メソッドを直接呼び出すのが最も簡単で最速の方法です。リフレクティブ呼び出しでは、メソッド情報を動的に取得して実行時に呼び出すことができます。委任を使用すると、メソッドを変数として処理できるため、より柔軟で、再利用可能。