Ответ 1
Компилятор не может использовать init(bool)
, потому что во время компиляции он не может знать, что T
есть bool
. То, что вы запрашиваете, - это динамическая диспетчеризация - какой метод фактически вызывается, зависит от типа времени выполнения аргумента и не может быть определен во время компиляции.
Это можно сделать в С# 4.0 с помощью типа dynamic
:
class CustomClass<T>
{
public CustomClass(T defaultValue)
{
init((dynamic)defaultValue);
}
private void init(bool defaultValue) { Console.WriteLine("bool"); }
private void init(int defaultValue) { Console.WriteLine("int"); }
private void init(object defaultValue) {
Console.WriteLine("fallback for all other types that don’t have "+
"a more specific init()");
}
}