基本型を派生型にキャストする方法 質問する

基本型を派生型にキャストする方法 質問する

これが奇妙なことなのかどうか、あるいは何らかのコード臭なのかはわかりませんが、基本型をその派生型の形式に「キャスト」する方法 (なんらかの OOP パターンがあると便利です) があるかどうか疑問に思っていました。派生型には親が提供していない追加機能があり、それ自体は根本的に健全ではないため、これはあまり意味がないことはわかっています。しかし、これを行う方法はあるのでしょうか? ここに、私が尋ねていることをよりよく説明できるコード例を示します。

public class SomeBaseClass {
    public string GetBaseClassName {get;set;}
    public bool BooleanEvaluator {get;set;}
}

public class SomeDerivedClass : SomeBaseClass {
    public void Insert(SqlConnection connection) {
          //...random connection stuff
          cmd.Parameters["IsItTrue"].Value = this.BooleanEvalutar;
          //...
    }
}

public static void Main(object[] args) {
    SomeBaseClass baseClass = new SomeBaseClass();
    SomeDerivedClass derClass = (SomeDerivedClass)baseClass; 
    derClass.Insert(new sqlConnection());
}

これは馬鹿げているように思われるかもしれませんが、このようなことを実現する方法はあるのでしょうか?

ベストアンサー1

「管理された」言語では健全ではない。これはダウンキャスト、そして、まさにあなたが説明した理由により、それを処理する健全な方法はありません (サブクラスは基本クラスよりも多くのものを提供します - この「より多くの」はどこから来るのでしょうか?)。特定の階層で同様の動作を本当に必要とする場合は、基本型をプロトタイプとして受け取る派生型のコンストラクターを使用できます。

リフレクションを使用して、単純なケース (追加の状態を持たないより具体的な型) を処理するものを構築することもできます。一般的には、問題を回避するために再設計するだけです。

編集: うわっ、基本型と派生型の間の変換演算子を記述できない。Microsoft が自分自身から「ユーザーを保護」しようとしているのは奇妙だ。まあ​​、少なくとも Sun ほどひどいわけではない。

おすすめ記事