2012-06-06 84 views
-2
ClassA 
{ 
     int a; 
     public int aValue 
     { 
      get { return a; } 
     } 
} 

ClassB : ClassA 
{ 
     int b; 
     public int bValue 
     { 
      get { return b; } 
     } 
} 

ClassC : ClassA 
{ 
     int c; 
     public int cValue 
     { 
      get { return c; } 
     } 
} 

public void getObject(int i) 
{ 
    if(i==1) 
    { 
     ClassB objB = new ClassB(); 
     objB.aValue = 20; 
     objB.bValue = 30; 
     Console.Writeline(objB.aValue); 
     Console.Writeline(objB.bValue); 
    } 
    else 
    { 
     ClassC objC = new ClassC(); 
     objC.aValue = 20; 
     objC.cValue = 40; 
     Console.Writeline(objC.aValue); 
     Console.Writeline(objC.cValue); 
    } 
} 

相反,我想創建一個返回對象,使得通用方法:與返回類型爲對象的通用方法

public T getObject<T>(int i) where T : class 
{ 
    if(i==1) 
    { 
     ClassB objB = new ClassB(); 
     return objB as T; 
    } 
    else 
    { 
     ClassC objC = new ClassC(); 
     return objC as T; 
    } 
} 

public static void main() 
{ 
    Object obj = getObject<Object>(5); 
    obj.aValue = 20; 
    obj.bValue = 30; 
    obj.cValue = 40; 
    Console.Writeline(obj.aValue); 
    Console.Writeline(obj.bValue); 
    Console.Writeline(obj.cValue); 
} 

在這種情況下的obj = objC所以bValue = 30和cValue = 40應發生。但我無法這樣做。 這是我的第三次嘗試。至少這次我希望我很清楚。

+0

看來也許你應該問問你的問題的最佳方法,而不是如何將你的方形釘塞入圓孔。 1)沒有人能看出爲什麼泛型應該在這裏發揮作用。 2)你的兩個類是否應該有某種通用接口或基類? 3)如果你想設置一個或另一組變量,那麼必須將其添加到確定要返回哪個類的相同邏輯中,那麼爲什麼要將這些類放在第一位呢? – itsme86

+0

這不是泛型所使用的,我建議你重新閱讀一些關於泛型的教程。 – Arran

+0

這是我的第三次嘗試。至少這次我希望我很清楚。 – Anamika

回答

2

好像這個問題可能是你問你的問題的方式......

你會使用在where子句中通用約束來約束它..

我不知道你爲什麼會想強制一個盒裝物體的一般方法......

+0

+1,這個建議也在以前的這個問題的化身中給出。 –

相關問題