1
    public class Red : CollisionClass
    {
        public CollisionChecker Algorithm; //this is a delegate that checks the collision
        public Red()
        {
            Algorithm = BaseAlgorithm; //PROBLEM, i dont know how to assign it correctly
        }
        public bool BaseAlgorithm(CollisionClass field)
        {
            return true;//in this method there will be an algorithm to check collision
        }
    }
    public delegate bool CollisionChecker(CollisionClass x,CollisionClass y);

このスクリプトには、CollisionClass という抽象クラスから派生した Red というクラスがあります。衝突クラスは、別の派生クラスと衝突しているかどうかを確認できます。そうするために、アルゴリズム デリゲートをアルゴリズム プロパティに格納できます。アイデアは、このクラスを拡張した場合、新しいアルゴリズムを作成してプロパティに格納できるということですが、割り当てる方法がわかりません。プロパティへのデリゲートとしてのメソッド。

私の質問を読んでくれてありがとう

4

1 に答える 1

2

構文は問題ありませんが、デリゲートに割り当てようとしているメソッドがデリゲート型の宣言と一致しません。

CollisionCheckerデリゲートは、2 つのインスタンスをパラメーターとして取り、true を返すように定義されていCollisionClassます。メソッド ( BaseAlgorithm) は単一の のみを受け入れますCollectionClass

そうは言っても、この場合、デリゲートをまったく使用する必要がないように思えます。デリゲートを簡単に削除し、メソッドを作成するだけで済みます。virtualこれにより、後でサブクラスでオーバーライドできるようになり、ここで達成しようとしているのと同じ「拡張」メカニズムが提供されます。

 public virtual bool Algorithm(CollisionClass field)
 {
     return true;
 }

これにより、サブクラスは必要に応じてメソッドをオーバーライドできますAlgorithm(ただし、 などのより適切な名前を検討しますCollides)。

于 2013-06-17T16:46:27.237 に答える