2012-02-26 68 views
0

這是我的代碼創建一個接口與基類,而派生類包含自己的實現

class InternalDevice1 
{ 
} 

class InternalDevice2 
{ 
} 

class SpecificDevice1 : InternalDevice1 
{ 
} 

class SpecificDevice2 : InternalDevice2 
{ 
} 

class SpecificDevice3 : InternalDevice1 
{ 
} 

class SpecificDevice4 : InternalDevice2 
{ 
} 

class MyWholeDevice1 : IDevice 
{ 
    MyWholeDevice(SpecificDevice1 device1, SpecificDevice2 device2) { } 
    SpecificDevice1 Device { get; } 
} 

class MyWholeDevice2 : IDevice 
{ 
    MyWholeDevice(SpecificDevice3 device1, SpecificDevice4 device2) { } 
    SpecificDevice3 Device { get; } 
} 


interface IDevice 
{ 
    InternalDevice1 Device { get; } 
} 

的問題是,在i設備的返回類型爲InternalDevice1(這是比較普遍) ,而我需要的SpecificDevice (這仍然是從InternalDevice dervied) 嘗試使用這個時,我遇到了一個問題:

IDevice = new MyWholeDevice ... 
+0

如果我理解你的權利,它的派生型。因此,將返回類型轉換爲SpecificDevice – pavanred 2012-02-26 10:09:34

回答

0

你應該讓你的iDevice generic

interface IDevice<TDevice> 
    where TDevice : InternalDevice1 
{ 
    TDevice Device { get; } 
} 

然後你的類看起來就像這樣:

class MyWholeDevice1 : IDevice<SpecificDevice1> 
{ 
    MyWholeDevice(SpecificDevice1 device1, SpecificDevice2 device2) { } 
    SpecificDevice1 Device { get; } 
} 

class MyWholeDevice2 : IDevice<SpecificDevice3> 
{ 
    MyWholeDevice(SpecificDevice3 device1, SpecificDevice4 device2) { } 
    SpecificDevice3 Device { get; } 
} 
+0

好吧,這就是我所做的,所以看起來我在正確的方向 當我嘗試以下時發生問題 IDevice =(IDevice )new MyWholeDevice(new SpecificDevice1,...) 我得到一個運行時錯誤:無法投出對象MyWholeDevice來鍵入IDevice – 2012-02-26 11:20:29

+0

@GeorgeRubin和'MyWholeDevice'是什麼?這樣的類沒有在您的代碼中定義。 – 2012-02-26 15:16:30

+0

I ment MyWholeDevice1 .. – 2012-02-27 08:10:42

相關問題