2012-02-26 14 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; } 
} 

問題は、私はSpecificDeviceを必要としながら、のiDeviceでの戻り値の型は、(より一般的である)InternalDevice1 であるということです(まだInternalDeviceからderviedされている) これを使用しようとすると、私は問題が発生しています:

IDevice = new MyWholeDevice ... 
+0

私は右のあなたを理解していれば、そのA派生型を。それで、戻り値の型をSpecificDeviceにキャストしてください – pavanred

答えて

0

をあなたのiDeviceのgeneric

012にする必要があります
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

OK、それは実際に私がやったことなので、正しい方向になっています。 IDevice =(IDevice )new MyWholeDevice(new SpecificDevice1、...) 実行時エラーが発生しました:オブジェクトMyWholeDeviceをタイプIDeviceにキャストできません –

+0

@GeorgeRubinとMyWholeDeviceは何ですか?そのようなクラスはあなたのコードで定義されていません。 –

+0

私はMyWholeDevice1 .. –

関連する問題