}
else if(m.Name.CompareTo("Set")==0 &&
pi[0].ParameterType == typeof(double)) {
// Set(double, double).
object[] args = new object[2];
args[0] = 1.12;
args[l] = 23.4;
M.Invoke(reflectOb, args);
}
else if(m.Name.CompareTo("Sum")==0) {
val = (int) m.Invoke(reflectOb, null);
Console.WriteLine(" " + val);
}
else if(m.Name.CompareTo("IsBetween")==0) {
object[] args = new object[1];
args[0] = 14;
if(<bool) m.Invoke (reflectOb, args))
Console.WriteLine(" 14 x ");
}
else ifjm.Name.CompareTo("Show")==0) {
m.Invoke(reflectOb, null);
}
}
}
}
.
: MyClass : AnotherClass : Demo
: MyClass
:
MyClass(Int32 i)
MyClass(Int32 i, Int32 j)
.
MyClass(int, int)
: 10, : 20
reflectOb
30
14
Set (int, int). : 9, : 18 Set(double, double). : 1, : 23 : 1, : 2 3
, , lasses. . MyClass, .
MyClasses. , . ().
// MyClasses.exe.
Assembly asm = Assembly.LoadFrom("MyClasses.");
// , MyClasses.exe.
[] alltypes = asm.GetTypes(); foreach(Type temp in alltypes)
Console.WriteLine(": " + temp.Name);
, .
. . (DLL) .dll. , MyClasses. cs :
csc /t:library MyClasses.es
MyClasses.dll. DLL , , , Main () , , . Demo Main () . DLL Main () . MyClass DLL, LoadFrom () .
|
|
Assembly asm = Assembly.LoadFrom("MyClasses.dll");
, . MyClass , MyClass. , Set Sum . , . , . , , , , .
, . MyClasses. , MyClass , MyClass, .
// MyClass, .
Using System;
Using System.Reflection;
class ReflectAssemblyDemo { static void Main() { int val;
Assembly asm = Assembly.LoadFrom("MyClasses.exe");
Type[] alltypes = asm.GetTypes();
Type t = alltypes[0]; // Console.WriteLine(": " + t.Name);
Constructorlnfo [.] ci = t.GetConstructors();
// .
Parameterlnf[] cpi = ci[0].GetParameters(); object reflectOb;
if (cpi.Length > 0) {
object[] consargs = new object[cpi.Length];
// , fox (int n=0; n < cpi.Length; n+ +) consargs[n] = 10 + n * 20;
// . reflectOb = ci [0].Invoke(consargs);
} else
reflectOb = ci [0].Invoke(null);
Console.WriteLine(" reflectOb."); Console.WriteLine();
// .
MethodInfo[] mi = t.GetMethods(BindingFlags.DeclaredOnly |
BindingFlags.Instance | BindingFlags.Public);
// , foreach(Methodlnfo m in mi) {
Console.WriteLine(" {0} ", m.Name);
// .
Parameterlnf[] pi = m.GetParameters();
// , switch(pi.Length) {
case 0: // if(m.ReturnType == typeof(int)) {
val = (int) m.Invoke (reflectOb, null);
Console.WriteLine(": " + val);
}
else if(m.ReturnType == typeof(void)) {