悪質なタイトルで申し訳ありませんが、この問題の正確な内容を絞り込むのは難しいです。別のベースクラスでベースクラス型変数への呼び出しを自動的にキャスト
私は本質的に並列に構築される2つのクラス階層を持っています:BaseObjectのすべてのサブタイプに対して、BaseUIObjectのサブタイプがあります。これの具体的な理由は、BaseObjectsが実際にスクリプト可能オブジェクト(単一性)であるため、これらのスクリプト可能オブジェクトの1つのインスタンスを表す別のクラスセットを使用しているためです。
例コードは:
public abstract class BaseUIObject {
public BaseObject someObject;
public void Setup(BaseObject baseObject)
{ this.baseObject = baseObject; }
}
public class SomeUIObject : BaseUIObject {
public void Setup(SomeObject someObject)
{ base.Setup(someObject); SomeUIObjectSpecificRoutine(); }
private void SomeObjectSpecificRoutine() {
someObject.doSubClassFunction();
}
}
SomeUIObjectのセットアップに型SomeObjectののオブジェクトを渡し、それが代わりSomeObjectののBaseObjectとして格納されてしまいます。この事態を防ぐきれいな方法はありますか?
私が持っている2つのオプションは、SomeUIObjectのメソッドで使用するたびに、SomeObject変数をBaseUIObjectのすべてのサブクラスで定義するか、(SomeObject)someObjectを明示的にキャストすることです。これらのメソッドのどちらもきれいに見えないし、これを行うために継承を使用するいくつかのより良い方法がなければならないように感じる。
ありがとうございました。
パーフェクト - これは私が後だまさにですが、知識を欠いていました適切にGoogleにできるようにする。クイック返信をありがとう、これが動作するかどうかを確認します。 – Cerzi
SomeUIObject-type/namespaceのSetup()arg型にT型の問題があります。 私はおそらくその実際の定義があるのでBaseUIObject自体は、別のクラスから継承することに注意してください: パブリック抽象クラスBaseUIObject:BaseObject –
Cerzi
タイプTあなたが相続の宣言に使用するタイプである:TはOtherBaseClass。あなたのコードはどのようになっていますか? –