设置委托属性

时间:2013-06-17 16:44:03

标签: c# properties delegates variable-assignment

    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的抽象类的派生类。碰撞类可以检查它是否与另一个派生类发生冲突。要做到这一点,算法委托可以存储在算法属性中,我的想法是,如果我进行了这个类的扩展,我可以创建新算法并将它们存储在属性中,但我不知道如何分配作为财产代表的方法。

感谢您阅读我的问题

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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