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的抽象类的派生类。碰撞类可以检查它是否与另一个派生类发生冲突。要做到这一点,算法委托可以存储在算法属性中,我的想法是,如果我进行了这个类的扩展,我可以创建新算法并将它们存储在属性中,但我不知道如何分配作为财产代表的方法。
感谢您阅读我的问题
答案 0 :(得分:2)
您的语法很好,但是您尝试分配给委托的方法与委托类型的声明不匹配。
CollisionChecker
委托被定义为将两个CollisionClass
实例作为参数,并返回true。您的方法(BaseAlgorithm
)只接受一个CollectionClass
。
话虽如此,在这种情况下,听起来你根本不需要使用代表。您可以轻松地删除委托,只需创建方法virtual
,因为这将允许您稍后在子类中覆盖它,提供您在此处尝试实现的相同“扩展”机制:
public virtual bool Algorithm(CollisionClass field)
{
return true;
}
有了这个,子类可以根据需要覆盖Algorithm
方法(尽管我会考虑更好的名称,例如Collides
等)。