多態性に使用する抽象基本クラスがあり、派生型を別の派生型に変換するメソッドを記述したいが、コンパイル時に派生型を知らない。私はリフレクションがこれを解決する正しい方法だと信じていますが、それを実装する正しい方法は何か分かりません。ここに私は現在立ち往生しています。実行時に未定義の派生型を変換する
Public Static BaseClass ConvertTo(BaseClass bc, Type type) {
//bc is currently DerivedClass1 which implements IConvertable
//type is currently DerivedClass2
//Trying to convert DerivedClass1 to DerivedClass2
return (BaseClass)ChangeType(bc, type);
}
この方法はDerivedClass2にDerivedClass1を変換しますが、それは私が実装しなければならない15個の不要な方法が付属していますので、私はそれを動作させるために、私はに不満だこれは、DerivedClass1ためIConvertableインタフェースを実装する必要がありました。
これを解決するためのよりエレガントな方法があります。これは、コンパイル時のキャストに近いものですか? DerivedClass1にDerivedClass2キャスト演算子があるかどうかによって、メソッドが成功するか、実行時例外がスローされる場所。次のようなものがあります。
Public Static BaseClass ConvertTo(BaseClass bc, Type type) {
//First down cast it to bc, then sideways cast it to type.
return (type)((bc.GetType())bc)
}
これで、ユーザー定義の変換で作業を行い、それを見つけてリフレクションで実行したいだけですか? –
類似の構造のコピーを作成しようとしていませんか?あなたが何をしようとしているものであれ、Automapperはもっと役に立つかもしれない – Arjang