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);

在这个脚本中:有一个名为 Red 的类,它是一个名为 CollisionClass 的抽象类的派生类。碰撞类可以检查它是否与另一个派生类发生碰撞。为此,可以将算法委托存储在算法属性中,其想法是,如果我对此类进行扩展,我可以创建新算法并将它们存储在属性中,但我不知道如何分配作为属性委托的方法。

感谢您阅读我的问题

4

1 回答 1

2

您的语法很好,但是您尝试分配给委托的方法与委托类型的声明不匹配。

CollisionChecker委托被定义为将两个实例CollisionClass作为参数,并返回 true。您的方法 ( BaseAlgorithm) 只接受一个CollectionClass.

话虽如此,在这种情况下,听起来您根本不需要使用委托。您可以轻松地消除委托,只需创建您的方法virtual,因为这将允许您稍后在子类中覆盖它,提供您在此处尝试实现的相同“扩展”机制:

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

有了这个,子类可以根据需要覆盖该Algorithm方法(尽管我会考虑一个更好的名称,例如Collides等)。

于 2013-06-17T16:46:27.237 回答