2010-03-15 101 views
1

我不知道它是否可能,但這裏是我需要的。 我玩弄東西,想知道它是否可能,因爲你不能創建自己的數據類型基於密封類型,如int,Int32,Int64等。引用繼承類的<T>類派生類

我想創建一個頂部級別的類是用一些常見的東西定義給定的類型。然後,將其派生爲兩個子類,但在這種情況下,每個類都基於int和Int64類型。從這個實例中,創建一個實例並知道參數引用/返回設置的基礎。

因此,當我需要創建「ThisClass」的實例時,我不必知道它的類型基礎是int還是Int64,但是IT將知道類型並且能夠允許方法/函數成爲用typed調用...這樣,如果我想將我的ThisClass定義從SubLevel1更改爲SubLevel2,則不必圍繞所有不同的數據類型定義跳舞。

希望這是有道理..

public class TopLevel<T> 
{ 
... 
} 

pubic class SubLevel1 : TopLevel<int> 
{ ... 
} 

public class SubLevel2 : TopLevel<Int64> 
{ ... 
} 

public class ThisClass : SubLevel1 
{ ... 
    public <based on the Int data type from SubLevel1> SomeFunc() 
    { 
     return <the Int value computed>; 
    } 
} 

回答

2

我認爲SomeFunc應該是存在於TopLevel<T>所有子類,所以你應該有定義它:

public abstract class TopLevel<T> 
{ 
    public TopLevel() 
    { 
    } 

    public abstract T SomeFunc(); 
} 

和具體子類都知道泛型類型參數,所以ThisClass將定義SomeFunc爲:

public class ThisClass : SubLevel1 
{ ... 
    public override int SomeFunc() 
    { 
     return <the Int value computed>; 
    } 
} 
+0

這是期望,但不一定要填寫一些這些抽象層面,但工作......謝謝 – DRapp 2010-03-16 18:22:27

1

這不可能在編譯時完成,無需paramterizing所有的派生類:

public class ThisClass<T> : SubLevel1<T> etc etc 

你可以通過反射做它在運行時檢查typeof(ThisClass).BaseType等,但這可能會非常混亂,因爲您需要編寫能夠理解整個基類中繼的繼承和泛型類型參數層次結構的代碼。

0

你不能按照要求做到這一點。

但是,您可以在文件的頂部寫入using MyType = System.Int32;,然後在文件的任何位置使用MyType。這將允許您輕鬆更改類型。