C#获取子类的类型并创建该类的对象 class主类{ 私有int方法(){ IList obj=db.Query(委托(子类obj){ 返回目标点==100; }); } } 类子类:MainClass{ 公共领域; } 子类obj=新的子类(); obj.someMethod();
子类可以是不同的,我需要获取这个实例来查询db4oC#获取子类的类型并创建该类的对象 class主类{ 私有int方法(){ IList obj=db.Query(委托(子类obj){ 返回目标点==100; }); } } 类子类:MainClass{ 公共领域; } 子类obj=新的子类(); obj.someMethod();,c#,C#,子类可以是不同的,我需要获取这个实例来查询db4o class MainClass { private int someMethod() { IList <SubClass> obj = db.Query <SubClass> (delegate(SubClass obj) { return obj.Points == 100; }); } } class SubClass : MainClass
class MainClass {
private int someMethod() {
IList <SubClass> obj = db.Query <SubClass> (delegate(SubClass obj) {
return obj.Points == 100;
});
}
}
class SubClass : MainClass {
public int someField;
}
SubClass obj = new SubClass();
obj.someMethod();
这是一种攻击,但不推荐,因为它不能实现多态性的目的 > P>从基类中评估子类类型以进行一些处理,通常是一个错误的决定,考虑将组合方法添加到基类中,然后对其子类采用特殊处理:
class MainClass
{
public string someMethod()
{
Type type = this.GetType(); //SubClass
return "";
}
}
class SubClass : MainClass
{
public int someField;
}
用法:
class MainClass {
public string ComposedMethod(){
//Base class processing...
var retVal = someMethod();
//Even more Base class processing...
return retVal;
}
public virtual string someMethod(){
}
}
class SubClass : MainClass {
public override string someMethod(){
return this.GetType().ToString(); //Or whatever you need to do
}
}
您正在查找这个类MainClass{public string someMethod(){//在上下文“this”-子类中。如果“this.getType()”它将是“namespace.SubClass”;子类cls=new SubClass();return“”;}}}类子类:MainClass{public int someField;}构建这样的代码将破坏多态性的目的。使someMethod虚拟化,然后在每个子类中实现它。不清楚您要做什么。你想要一个类型能够自我复制吗?为什么对象中的“this”会返回一个不同的对象?我需要它来处理db4o的不同子类。例如,IList obj=db.Query(委托(SomeClass obj){return obj.Points==100;})<代码>类型类型=this.GetType()代码>没有创建该类型的实例,它只是。。。获取类型。您可以创建子类的实例,也可以创建子类cls=new SubClass();在里面someMethod@DangerZone没有
new SubClass()。someMethod()
将显示SubClass
,而不是MainClass
。啊,读错了。没有看到OP从子类
实例调用了someMethod()
。我需要它来使用db4o处理不同的子类。例如,私有字符串someMethod(){IList obj=db.Query(委托(子类obj){return obj.Points==100;});返回一些字符串;}当其中一个子类采用方法“someMethod”时,我需要获取“SubClass”。
SubClass obj = new SubClass();
obj.ComposedMethod();