2013-06-17 2 views
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. класс столкновения может проверить, не сталкивается ли он с другим производным классом. для этого делегат алгоритма может быть сохранен в свойстве алгоритма, идея в том, что если я когда-либо сделаю расширение этого класса, я могу создать новые алгоритмы и сохранить их в свойстве, но я не знаю, как назначить метод в качестве делегата собственности.Установка свойства

Спасибо за чтение моего вопроса

+0

Ваш делегат не является собственностью, это поле. Кроме того, вероятно, это скорее событие 'event', чем поле или свойство типа делегата. – Servy

ответ

2

Вашего синтаксис хорошо, но метод, который вы пытаетесь присвоить делегат не соответствует декларации типа делегата.

Делегат CollisionChecker определяется как принятие двух экземпляров CollisionClass в качестве параметров и возврат истины. Ваш метод (BaseAlgorithm) принимает только один CollectionClass.

При этом в этом случае звучит так, будто вам не нужно вообще использовать делегатов. Вы могли бы легко устранить делегат, и просто сделать свой метод virtual, так как это позволит вам переопределить его в подклассах позже, обеспечивая тот же самый механизм «расширения», который вы пытаетесь достичь здесь:

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

С этим , подклассы могли бы переопределить метод Algorithm (хотя я бы подумал о лучшем имени, например Collides и т. д.) по мере необходимости.

Смежные вопросы