2015-09-13 2 views
0

Общие классы могут объявляться с помощью общих делегатов, как показано ниже, но это, к сожалению, метаданные. Я не могу найти полный пример:Пример общего делегата?

public abstract class Expression 
{ 
public static Expression<TDelegate> Lambda<TDelegate>(Expression body, bool tailCall, IEnumerable<ParameterExpression> parameters); 
} 

здесь TDelegate является Func <>. Можете ли вы написать пример общего класса, в котором используется общий делегат? Я не мог найти такой пример.

ответ

0

Общие параметры не помогли бы при ограничении типов делегатов. Там нет никакого практического использования этого, если вы не хотите передать тип делегата, используя общий аргумент вместо использования регулярных typeof ключевого слова или Object.GetType метода:

public void DoStuff<TDelegate>() 
// vs. 
public void DoStuff(Type delegateType); 

Делегаты не классы, и они не поддерживают наследование и другие функции, доступные для классов и интерфейсов. Что вы можете сделать, это ограничение общих параметров делегата.

Например, вы хотите, чтобы ограничить Func<T> что T является IWhatever:

public void DoStuff<T>(Func<T> func) where T : IWhatever 
{ 
}