2016-10-18 39 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

相關問題