1

c# で Reflection を使用してメソッドがどのように呼び出されるかを知りたいです。

ここに私が本から選んだコードがあります

using System;
using System.Reflection;
class MyClass {
int x;
int y;
public MyClass(int i, int j) {
x = i;
y = j;
}
public int Sum() {
return x+y;
}
public bool IsBetween(int i) {
if((x < i) && (i < y)) return true;
else return false;
}
public void Set(int a, int b) {
Console.Write("Inside Set(int, int). ");
x = a;
      y = b;
Show();
}
// Overload set.
public void Set(double a, double b) {
Console.Write("Inside Set(double, double). ");
x = (int) a;
y = (int) b;
Show();
}
public void Show() {
Console.WriteLine("Values are x: {0}, y: {1}", x, y);
}
public void Show1() {
Console.WriteLine("Hello");
} 
}
class InvokeMethDemo {
static void Main() {
Type t = typeof(MyClass);
MyClass reflectOb = new MyClass(10, 20);
int val;
Console.WriteLine("Invoking methods in " + t.Name);
Console.WriteLine();
MethodInfo[] mi = t.GetMethods();
// Invoke each method.
foreach(MethodInfo m in mi) {
// Get the parameters.
ParameterInfo[] pi = m.GetParameters();
if(m.Name.Equals("Set", StringComparison.Ordinal) &&
pi[0].ParameterType == typeof(int)) {
object[] args = new object[2];
args[0] = 9;
args[1] = 18;
m.Invoke(reflectOb, args);
}
else if(m.Name.Equals("Set", StringComparison.Ordinal) &&
pi[0].ParameterType == typeof(double)) {
object[] args = new object[2];
args[0] = 1.12;
args[1] = 23.4;
m.Invoke(reflectOb, args);
}
else if(m.Name.Equals("Sum", StringComparison.Ordinal)) {
val = (int) m.Invoke(reflectOb, null);
Console.WriteLine("sum is " + val);
}
else if(m.Name.Equals("IsBetween", StringComparison.Ordinal)) {
object[] args = new object[1];
args[0] = 14;
if((bool) m.Invoke(reflectOb, args))
Console.WriteLine("14 is between x and y");
}
else if(m.Name.Equals("Show", StringComparison.Ordinal)) {
m.Invoke(reflectOb, null);

}
else if(m.Name.Equals("Show1", StringComparison.Ordinal)) {
m.Invoke(reflectOb, null);
}         
}
}
}
  1. 渡されたパラメータの数とタイプに基づいてメソッドが呼び出されますか。はいの場合、その理由

**同じステートメントを使用してメソッド show を呼び出すため、コンパイラはエラーを表示しません。

show1**?

また

  1. メソッドは、 m の参照値(MethodInfo m)とパラメーターの数に基づいて呼び出されます。
4

1 に答える 1

1

MethodBaseクラスを使用してメソッドを呼び出すことができます。

指定されたパラメーターを使用して、現在のインスタンスによって表されるメソッドまたはコンストラクターを呼び出します。このリンクを参照してください

于 2012-04-27T05:47:22.777 に答える