using System;
using System.Reflection;
public abstract class SimplyAbstractClass
{
public abstract void SayHello();
}
public class SimplyClass1 : SimplyAbstractClass
{
public override void SayHello()
{
Console.WriteLine("Hello www.webexpress.cn,This is from Simply1!");
}
}
public class SimplyClass2 : SimplyAbstractClass
{
public override void SayHello()
{
Console.WriteLine("Hello www.webexpress.cn,This is from Simply2!");
}
}
public class ClientManager
{
public static void SayHello(SimplyAbstractClass instanceClass)
{
instanceClass.SayHello();
}
}
public class Client
{
public static void Main()
{
//便于演示,列出所有子类
string[] Classes = new string[2];
Classes[0] = "SimplyClass1";
Classes[1] = "SimplyClass2";
//根据程序集名称加载程序集
Assembly assembly = Assembly.Load("ConsoleStudy");
Type obj;
//循环调用
for (int i = 0; i < Classes.Length; i++)
{
obj = assembly.GetType(Classes[i]);
SimplyAbstractClass classInstance = (SimplyAbstractClass)Activator.CreateInstance(obj);
ClientManager.SayHello(classInstance);
}
Console.ReadLine();
}
}
using System;
using System.Reflection;
public class AssemblyCall
{
public AssemblyCall()
{
}
//成员变量
public string WebStation;
//属性
private string AuthorName = "Netlibertine";
public string _AuthorName
{
get
{
return this.AuthorName;
}
set
{
this.AuthorName = (string)value;
}
}
//有返回值方法(不带参数)
public string GetAuthorName()
{
return this.AuthorName;
}
//有返回值方法(带参数)
public string GetAuthorName(string strName)
{
return strName;
}
}
public class Client
{
public static void Main()
{
string strTemp;
//获得Type信息
Type type = typeof(AssemblyCall);
//实例化对象类
Object obj = type.InvokeMember(null, BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.CreateInstance, null, null, null);
#region 成员变量调用
Console.WriteLine("--成员变量调用--");
Console.WriteLine("成员变量赋值前值:");
//调用
strTemp = (string)type.InvokeMember("WebStation", BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField,null,obj,null);
Console.WriteLine(strTemp);
Console.WriteLine("请输入参数值:");
strTemp = Console.ReadLine();
//赋值
type.InvokeMember("WebStation", BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.SetField, null, obj, new object[] { strTemp});
Console.WriteLine("成员变量赋值后值:");
strTemp = (string)type.InvokeMember("WebStation", BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField, null, obj, null);
Console.WriteLine(strTemp);
Console.WriteLine();
#endregion
#region 方法(不带参数)
Console.WriteLine("--方法(不带参数)--");
Console.WriteLine("函数名称:GetAuthorName");
Console.WriteLine("调用返回值:");
//调用
strTemp = (string)type.InvokeMember("GetAuthorName", BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.InvokeMethod, null, obj, null);
Console.WriteLine(strTemp);
Console.WriteLine();
#endregion
#region 方法(带参数)
Console.WriteLine("--方法(带参数)--");
Console.WriteLine("函数名称:GetAuthorName");
Console.WriteLine("请输入参数值:");
strTemp = Console.ReadLine();
Console.WriteLine("调用返回值:");
//调用
strTemp = (string)type.InvokeMember("GetAuthorName", BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.InvokeMethod, null, obj, new object[] { strTemp });
Console.WriteLine(strTemp);
Console.WriteLine();
#endregion
#region 属性调用
Console.WriteLine("--属性调用--");
Console.WriteLine("属性赋值前值:");
//调用
strTemp = (string)type.InvokeMember("_AuthorName", BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetProperty, null, obj, null);
Console.WriteLine(strTemp);
Console.WriteLine("请输入属性值:");
strTemp = Console.ReadLine();
//赋值
type.InvokeMember("_AuthorName", BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.SetProperty, null, obj, new object[] { strTemp });
Console.WriteLine("属性赋值后值:");
strTemp = (string)type.InvokeMember("_AuthorName", BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetProperty, null, obj, null);
Console.WriteLine(strTemp);
Console.WriteLine();
#endregion
Console.ReadLine();
}