2015-07-15 4 views
0

Я разработал следующий интерфейс.Ограничение общего входного параметра

public interface IProcess<ICommand> { void Run(); } 

Однако Resharper замечает, что это на самом деле не имеет значения, что я называю входной параметр, будь то ICommand или TWhatEverElse.

Теперь это легко узнаваемый по имени я выбрал то, что я предназначен было установить ограничение типа родового параметра, чтобы быть один, который реализуется, производный или просто типа ICommand

К сожалению, упрямый компьютер делает то, о чем я прошу, а не то, что я имею в виду, поэтому мне нужна помощь. Использование обозначений : where не принесет мне много пользы, потому что я хочу ограничить интерфейс (и все его миньоны).

Могу ли я ограничить тип, который отправляется в фигурные скобки крокодила, и если да, то как?

Редактировать

Я добавил пункт где и прибыли в следующем.

public interface IProcess<TCommand> where TCommand : ICommand { } 

Однако, похоже, мне что-то не хватает. Класс реализации следующий.

public class Processo : IProcess<Commando> { } 

public class Commando : ICommand { } 

Однако компилятор утверждает, что он не собирается летать, потому что Commando не конвертируется в ICommand. Что мне здесь не хватает ?!

+0

Вы исследовали это? Посмотрите на это: https://msdn.microsoft.com/en-us/library/d5x73970.aspx –

+0

Ха, по-видимому, я этого не сделал. По крайней мере, недостаточно. Это то, что человек получает, когда человек принимает то, что узнает ... Позор мне. Тем не менее, хороший вопрос, подумайте. –

+0

Итак, теперь вы знаете, как это сделать? – Ric

ответ

3

Вы можете применить ограничение, используя ключевое слово where:

public interface IProcess<T> where T : ICommand { void Run(); } 

как описано here at MSDN.

+0

См. Править. Я использовал вашу ссылку, и это помогло, но я все еще что-то застрял. –

+0

Я видел ваше редактирование. Я протестировал ваш код, и он отлично работает для меня. Так происходит что-то еще. Одна вещь, которую вы не указали в своем вопросе, - это «ICommand», так что, возможно, с этим что-то не так-то прямолинейно. Не указывая на это, я не могу сказать. –

+0

Надеюсь, что у вас есть. Нужно продолжать изучать его. Насколько я могу судить, там ничего странного не происходит, но, видимо, есть что-то. Я разработаю некоторые собственные классы и продолжаю пытаться. +1 за тщательность. –

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