2016-10-18 37 views
0
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(); 

子类可以不同,我需要获取此实例以对db4o进行查询。C#获取子类的类型并创建此对象

+0

您是否在寻找这类MainClass { 公共字符串的someMethod(){ // 在上下文中 “本” - 子类。如果“this.getType()”它将是“namespace.SubClass”; SubClass cls = new SubClass(); return“”; } } class子类:MainClass { public int someField; } –

+1

构建这样的代码将会破坏多态性的目的。制作一些虚拟的方法,然后在每个子类中实现它。 –

+0

不清楚你想要做什么。你想要一个类型能够重现自己? – itsme86

回答

-1
class MainClass 
{ 
    public string someMethod() 
    { 
     Type type = this.GetType(); //SubClass 
     return ""; 
    } 
} 

class SubClass : MainClass 
{ 
    public int someField; 
} 

它是黑客,但不推荐,因为它不符合多态性的目的。

+0

'Type type = this.GetType();'不创建该类型的实例,它只是...获取类型。 –

+0

你可以创建SubClass的实例也是SubClass cls = new SubClass(); 在某些方法 –

+0

@ DangerZone Nope。 'new SubClass()。someMethod()'将显示'SubClass',而不是'MainClass'。 – itsme86

0

评估子类型从基类做一些处理,一般是一个错误的决定,考虑增加一个组合方法的基类,然后利用专门的处理,它的子类:

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 
    } 
} 

用法:

SubClass obj = new SubClass(); 
obj.ComposedMethod(); 
+0

我需要这个工作与db4o不同的子类。例如 私有字符串someMethod() { IList obj = db.Query (delegate(SubClass obj){return obj.Points == 100;}); 返回一些字符串; } 我需要得到“子类”,当其中一个子类将采取一种方法“someMethod”。 – MrGabriel

相关问题