我们都知道,可以使用反射通过字符串来创建一个类。
namespace car
{
public class Honda
{
public int weight {get;set;}
public class Odyssey
{
public int long{get;set;}
}
}
}
可以通过:
System.Reflection.Assembly.GetExecutingAssembly().CreateInstance("car.Honda", false);
创建对象Honda,但是无法通过:
System.Reflection.Assembly.GetExecutingAssembly().CreateInstance("car.Honda.Odyssey", false);
创建Odyssey对象。
我想了很多办法都不行。。
提示:外部类相当于内部类的一个命名空间,使用的时候,可以通过car.Honda.Odyssey使用。
namespace car
{
public class InvokeClient
{
public void ClientInvoke()
{
Type pType = Type.GetType(this.GetType().Namespace + ".Honda", true, true);
Honda ha = Activator.CreateInstance(pType) as Honda;
int f = ha.weight;
string mm = this.GetType().Namespace;
pType = Type.GetType(this.GetType().Namespace + ".Honda+Odyssey", true, true); //中间是 "+" 号 哦
car.Honda.Odyssey od = Activator.CreateInstance(pType) as car.Honda.Odyssey;
int m = od.long1;
pType = Type.GetType(this.GetType().Namespace + ".Honda+Odyssey+NEWCAR", true, true);
car.Honda.Odyssey.NEWCAR od2 = Activator.CreateInstance(pType) as car.Honda.Odyssey.NEWCAR ;//如果是内部类的内部类则是 两个 中间是 "+" 号 哦
int mads = od2.fk;
}
}
public class Honda
{
public int weight
{
get
{
return 1;
}
}
public class Odyssey
{
public int long1
{
get { return 2; }
}
public class NEWCAR
{
public int fk
{
get { return 200; }
}
}
}
}
}
Honda _istance = (Honda )Activator.CreateInstance(Type.GetType("car.Honda.Odyssey,car.Honda", false, true));