接口机制实现动态加载类,其中包含 Activator.CreateInstance基本用法示例,有反射的味道
public interface IPerson
{
string GetHello();
}
public class Teacher:IPerson
{
public string GetHello()
{
return "Hello,I am a Teacher.";
}
}
public class Student:IPerson
{
public string GetHello()
{
return "Hello,I am a Student.";
}
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.cbClass.Items.Add("InterFaceCreateInstanceDemo.Teacher");
this.cbClass.Items.Add("InterFaceCreateInstanceDemo.Student");
this.cbClass.SelectedIndex = 0;
}
private void btnExe_Click(object sender, EventArgs e)
{
IPerson p = InitPerson(null);
MessageBox.Show(p.GetHello());
}
public IPerson InitPerson(object objArr)
{
string vFullClassName = this.cbClass.SelectedItem.ToString();
object result = null;
Type pagerType = null;
pagerType = Type.GetType(vFullClassName);
if (objArr != null) result = Activator.CreateInstance(pagerType, objArr);
else result = Activator.CreateInstance(pagerType);
return (IPerson)result;
}
}
当动态加载的类在不同的程序集的时候 需要用如下方法:
public IPager InitPager(object objArr)
{
string vFullClassName = SpiderEngine;
object result = null;
Type pagerType = null;
System.Reflection.Assembly asmb = System.Reflection.Assembly.LoadFrom("XXX.dll");
pagerType = asmb.GetType(vFullClassName);
if (objArr != null) result = Activator.CreateInstance(pagerType, objArr);
else result = Activator.CreateInstance(pagerType);
return (IPager)result;
}
资源文件列表
InterFaceCreateInstanceDemo/InterFaceCreateInstanceDemo/bin/Debug/InterFaceCreateInstanceDemo.exe , 10240
InterFaceCreateInstanceDemo/InterFaceCreateInstanceDemo/bin/Debug/InterFaceCreateInstanceDemo.pdb , 24064
InterFaceCreateInstanceDemo/InterFaceCreateInstanceDemo/bin/Debug/InterFaceCreateInstanceDemo.vshost.exe , 22472
InterFaceCreateInstanceDemo/InterFaceCreateInstanceDemo/bin/Debug/InterFaceCreateInstanceDemo.vshost.exe.manifest , 490
InterFaceCreateInstanceDemo/InterFaceCreateInstanceDemo/Form1.cs , 1209
InterFaceCreateInstanceDemo/InterFaceCreateInstanceDemo/Form1.Designer.cs , 3181
InterFaceCreateInstanceDemo/InterFaceCreateInstanceDemo/Form1.resx , 5817
InterFaceCreateInstanceDemo/InterFaceCreateInstanceDemo/InterFaceCreateInstanceDemo.csproj , 3881
InterFaceCreateInstanceDemo/InterFaceCreateInstanceDemo/InterFaceCreateInstanceDemo.sln , 943
InterFaceCreateInstanceDemo/InterFaceCreateInstanceDemo/InterFaceCreateInstanceDemo.v11.suo , 36864
InterFaceCreateInstanceDemo/InterFaceCreateInstanceDemo/IPerson.cs , 212
InterFaceCreateInstanceDemo/InterFaceCreateInstanceDemo/obj/Debug/DesignTimeResolveAssemblyReferences.cache , 863
InterFaceCreateInstanceDemo/InterFaceCreateInstanceDemo/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache , 6899
InterFaceCreateInstanceDemo/InterFaceCreateInstanceDemo/obj/Debug/InterFaceCreateInstanceDemo.csproj.FileListAbsolute.txt , 1010
InterFaceCreateInstanceDemo/InterFaceCreateInstanceDemo/obj/Debug/InterFaceCreateInstanceDemo.csproj.GenerateResource.Cache , 975
InterFaceCreateInstanceDemo/InterFaceCreateInstanceDemo/obj/Debug/InterFaceCreateInstanceDemo.csprojResolveAssemblyReference.cache , 2209
InterFaceCreateInstanceDemo/InterFaceCreateInstanceDemo/obj/Debug/InterFaceCreateInstanceDemo.exe , 10240
InterFaceCreateInstanceDemo/InterFaceCreateInstanceDemo/obj/Debug/InterFaceCreateInstanceDemo.Form1.resources , 180
InterFaceCreateInstanceDemo/InterFaceCreateInstanceDemo/obj/Debug/InterFaceCreateInstanceDemo.pdb , 24064
InterFaceCreateInstanceDemo/InterFaceCreateInstanceDemo/obj/Debug/InterFaceCreateInstanceDemo.Properties.Resources.resources , 180
InterFaceCreateInstanceDemo/InterFaceCreateInstanceDemo/Program.cs , 508
InterFaceCreateInstanceDemo/InterFaceCreateInstanceDemo/Properties/AssemblyInfo.cs , 1392
InterFaceCreateInstanceDemo/InterFaceCreateInstanceDemo/Properties/Resources.Designer.cs , 2906
InterFaceCreateInstanceDemo/InterFaceCreateInstanceDemo/Properties/Resources.resx , 5612
InterFaceCreateInstanceDemo/InterFaceCreateInstanceDemo/Properties/Settings.Designer.cs , 1114
InterFaceCreateInstanceDemo/InterFaceCreateInstanceDemo/Properties/Settings.settings , 249
InterFaceCreateInstanceDemo/InterFaceCreateInstanceDemo/Student.cs , 289
InterFaceCreateInstanceDemo/InterFaceCreateInstanceDemo/Teacher.cs , 290
