【问题标题】:Setting a delegate property设置委托属性
【发布时间】:2013-06-17 16:44:02
【问题描述】:
    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 的抽象类的派生类。碰撞类可以检查它是否与另一个派生类发生碰撞。为此,可以将算法委托存储在算法属性中,其想法是,如果我对此类进行扩展,我可以创建新算法并将它们存储在属性中,但我不知道如何分配作为属性委托的方法。

感谢您阅读我的问题

【问题讨论】:

  • 你的委托不是一个属性,它是一个字段。此外,它可能应该是 event 而不是委托类型的字段或属性。

标签: c# properties delegates variable-assignment


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2012-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-08
    • 2011-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多