2012-02-26 55 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

相关问题