2013-05-15 2 views
0

Я пытаюсь вызвать универсальную функцию, которая реализует интерфейс с набором свойств.Общая реализация функции Интерфейс

код, как показано ниже:

public bool NeedsRenderAction<M, U>(M parent, U child) 
      where M : IVrsnProps 
      where U : IVrsnProps 
     { 
      return true; 
     } 

я зову его ниже способом. С точки зрения бритвы.

bool x = NeedsRenderAction<LayoutVrsn, WidgetVrsn>(Model.SPV, widget); 

Звонок даже не срабатывает. Неправилен в выходе: Там нет неявного ссылочного преобразования из «layoutvrsn объекта» для

Любой работы «IVrsnProps» вокруг плзли ...............

+0

Are LayoutVrsn и WidgetVrsn реализуют IVrsnProps? – graumanoz

ответ

2

Похож параметр, который вы передаете Model.SPV, не реализует интерфейс IVrsnProps, и общее ограничение, которое вы определили в своей функции, не позволяет выполнить его. Судя по сообщению об ошибке, которое вы получаете, похоже, что свойство SPV имеет тип object, который, очевидно, не имеет ничего общего с интерфейсом IVrsnProps.

Для этой работы вы должны либо удалить это общее ограничение или иметь свой SPV свойства правильного типа:

public IVrsnProps SPV { get; set; } 

же стоит правды, конечно, для второго параметра. Вы передаете переменную widget, и для этой работы эта переменная должна быть типом, который реализует интерфейс IVrsnProps.

+0

но я заставил его реализовать IVrsnProps – user1840841

+0

Где вы это сделали? В функции? Это общее ограничение. Общее ограничение означает, что вам нужно передать переменную, которая удовлетворяет этому ограничению. Вот как работают дженерики. Дженерики обеспечивают безопасность во время компиляции, означающую, что ваш код не будет компилироваться, если не гарантируется, что вы передадите правильный тип. В вашем случае вы передаете «объект», который может быть абсолютно любым во время выполнения. Никакой гарантии вообще. Я бы рекомендовал вам больше узнать о дженериках и о том, как их использовать. –

+0

Он работал над удалением ограничения на него, но мне нужно ограничение. и установка SPV, я уже делаю это ниже, поскольку SPV также является общим .public T SPV {get; задавать; } поэтому я хочу, чтобы я переопределил это, или я могу создать другое свойство, которое реализует IVrsnProps – user1840841

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