2012-03-17 3 views
0

私は2つの基本クラスのパラメータを受け入れる関数を持っています。この関数では、いくつかの派生クラスにわたってこれらのパラメータの型をテストし、多態関数を呼び出すことを望みます。コンパイルされない私の最初の試みを見るには、以下を参照してください。実行時に派生クラスを決定し、多態性メソッドを呼び出す方法

public static double Intersect(baseClass s0, baseClass s1) 
    { 
      if (s1 is derivedClassB) return (s0 as derivedClassA).PolyMethod((derivedClassB)s1); 

      else if (s1 is derivedClassC) return (s0 as derivedClassA).PolyMethod((derivedClassC)s1); 
        else return 0.0; 

    } 

私は私が

Type dType = s0.GetType(); 
(s0 as dType).PolyMethod(derivedClassB) s1); 

のようなものを使用することができますが、これはどちらか動作しませんと思いました。

+0

のように簡略化することができ、この

public DerviedClassX : BaseClass { public override double PolyMethod(BaseClass s) { return 0.0; // Return something usefull here. } } 

のような派生クラスを定義し、この

public abstract BaseClass { public abstract double PolyMethod(BaseClass s); } 

のようなあなたの基本クラスを定義します。 – Simon

+0

申し訳ありません私の試行された単純化で何かが間違っていた...今すぐ書式設定されたokを考えて – gwizardry

+0

C#で多態的メソッドの組み込みサポートを使用しない理由はありますか? * virtual *キーワード? –

答えて

2

は、その後、あなたの方法が適切にあなたのコードをフォーマットしてください。この

public static double Intersect(BaseClass s0, BaseClass s1) 
{ 
    return s0.PolyMethod(s1); 
} 
+0

私はあなたがここで何をしようとしているのかはわかりませんが、これは[仮想ディスパッチでの答えです](http://stackoverflow.com/a/9165003/880990)そこにエリックリッパーズのarcticle二重の派遣であなたを助けるかもしれない。 –

+0

おかげさま...シンプルで分かります。 – gwizardry

+0

これは私が探しているものです...実際に私の例は私がここに示したものより少し複雑ですが、私は2つのパラメータがタイプを超えていたので混乱していました。実際、それはちょうどこのシンプルで、現在はうまく動作していることに気をつけました。 – gwizardry

関連する問題