一般如果一个
classA :InterfaceB
那么通过下面的方式:
Type _Asstype = ass.GetType(_classA);
InterfaceB pi = Activator.CreateInstance(_Asstype) as InterfaceB;
这个创建这个类对象。可是如果:
classA :abstractC, InterfaceB
那么如何类似上面创建对象?
classA :InterfaceB
那么通过下面的方式:
Type _Asstype = ass.GetType(_classA);
InterfaceB pi = Activator.CreateInstance(_Asstype) as InterfaceB;
这个创建这个类对象。可是如果:
classA :abstractC, InterfaceB
那么如何类似上面创建对象?
Type _Asstype = ass.GetType(_classA);
classA pi = Activator.CreateInstance(_Asstype) as classA;
或者:
Object pi = Activator.CreateInstance(_Asstype) as InterfaceB;调用时用(InterfaceB)pi和(abstractC)pi。
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Reflection;namespace ConsoleApplication45
{
public abstract class abstractC
{
public string ClassName = "abstractC";
public abstract char Method_C();
}
public interface InterfaceB
{
abstractC ToAbstractC { get;}
char Method_B();
}
class A : abstractC, InterfaceB
{
private char a='A', b='B', c='C';
public int Method_A()
{
return a;
}
public override char Method_C()
{
return c;
}
char InterfaceB.Method_B()
{
return b;
}
abstractC InterfaceB.ToAbstractC
{
get { return this; }
}
}
class Program
{
static void Main(string[] args)
{
Assembly ass = Assembly.GetExecutingAssembly();
Type _Asstype = ass.GetType(new A().ToString(),true);
InterfaceB pi = Activator.CreateInstance(_Asstype) as InterfaceB;
// InterfaceB
Console.WriteLine(pi.Method_B());
// abstractC
Console.WriteLine(pi.ToAbstractC.ClassName);
Console.WriteLine(pi.ToAbstractC.Method_C());
// class A 的内容不可见
// Console.WriteLine(pi.Method_A());
Console.Read();
}
}
}
abstractC InterfaceB.ToAbstractC
{
get { return this as abstractC; }
}
谢谢你的code,你的做法 不是很适合我的系统(这种方式会造成interface的不稳定)
我的做法和panjf的不谋而合:
Object pi =Activator.CreateInstance(_Asstype)as InterfaceB;
调用时用(InterfaceB)pi和(abstractC)pi。谢谢各位,结贴!!