0

インターフェイスから派生した特定のオブジェクトを、同じインターフェイスから派生した別のタイプにキャストする方法を実現しようとしています。これは、オブジェクトを完全に再構築する必要がないようにするためです。

interface IItem
{
}

class FryingPan : IItem
{
}

class CookingPan : IItem
{
}

しかし、ここに問題があります。どのタイプにキャストしているのかわかりません。私は型変数でしか知りません。これはコンボボックスから設定されます。

Type SelectedItem { get; set; }

これを行うことができますか(できれば実装する必要はありませんIConvertable

4

1 に答える 1

3

CookingPan を FryingPan にキャストしようとしている場合、それはできません。キャストするには、一方から他方を派生させる必要があります。想像;

interface IFruit
{ }

class Apple : IFruit
{ }

class Orange : IFruit
{ }

明らかに、リンゴがオレンジになることはありません。ただし、Apple または Orange のいずれかを IFruit にキャストできます。どちらも共通の祖先を共有しているためです。あるいは、あなたがマッドサイエンティストなら、どうにかしてリンゴをオレンジに変えることができるかもしれません。;-)

あなたは間違った方法で問題に取り組んでいると言えます。.Type に応じて IItem で特定のアクションを実行する必要がある場合は、その情報が既にあります。共通の並べ替え基準が必要な場合は、すべての派生型の共通の祖先として基本クラス/インターフェイスに移動することを検討してください。

于 2012-07-26T22:19:04.787 に答える