У меня есть общий класс, в котором я определяю метод, который должен принимать аргументы другого типа, но только если другой тип реализует параметр типа класса. Однако это не скомпилируется:
class GenericClass<TClass>
{
public void DoSomething<TMethod>(TMethod input) where TClass : TMethod
{
// ...
}
}
Я получаю сообщение об ошибке компилятора TClass
в ограничении метода. Есть ли другой способ указать это?
Уточнение:
У меня сложилось впечатление, что TMethod: TClass
означает, что TMethod
должен наследовать или реализовывать TClass
] (в зависимости от того, является ли TClass
конкретным типом или интерфейсом).В другом, несколько нетрадиционном, обозначении TMethod> TClass
(то есть TMethod
является расширенным набором TClass
).
Я хочу здесь, чтобы ] TMethod
должен быть допустимым типом, только если TClass
наследует или реализует его, то есть TClass> TMethod
. Будет ли TMethod: TClass
делать то же самое?
(Один из ответов гласит, что TMethod: TClass
требует, чтобы TMethod
был назначен из TClass
. Я не уверен, соответствует ли это моим требованиям, но если это так, пожалуйста, объясните более подробно, что означает назначение из , поскольку, если это помогает мне, я, вероятно, неправильно понял это ...)