Я использовал шаблоны на C++, но на самом деле не пытался слишком часто сталкиваться с генераторами C# в прошлом. Вот упрощенная урезанная версия о том, что я пытаюсь сделать (это было бы возможно в C++):Перехват методов вызова класса класса C# с помощью примитивов
class DoesStuffWithPrimatives
{
public void DoStuff(double value) { }
public void DoStuff(string value) { }
public void DoStuff(int value) { }
public void DoStuff(uint value) { }
// etc...
}
class GenericBase<T>
{
private readonly T _testValue;
private DoesStuffWithPrimatives _doesStuff = new DoesStuffWithPrimatives();
public GenericBase(T testValue)
{
_testValue = testValue;
}
public void DoStuff()
{
_doesStuff.DoStuff(_testValue);
}
}
class DoubleContrete : GenericBase<double>
{
public DoubleContrete() : base(1.54545487)
{
}
}
class IntConrete : GenericBase<int>
{
public IntConrete() : base(80085)
{
}
}
Я получаю компиляции ошибки (в методе DoStuff()
на GenericBase<T>
):
Ошибка CS1503 Аргумент 1: не удается преобразовать из «T» в «двойной»
Почему не компилятор решительность, какой из DoesStuffWithPrimatives.DoStuff(…)
перегрузок называть !?
Очистить ответ. Было бы неплохо, если бы вы обеспечили простое использование параметра типа в родовом классе, чтобы позволить ему использовать методы этого типа. –
Кроме того, что-то интересное, если один добавить 'DoStuff (значение объекта)', то ошибка будет идти, однако, код будет запеченным использовать «DoStuff (значение объекта)' независимо от того, что указано в параметре типа. –
Вы не можете использовать 'T' для' double'. Я пробовал код, и он не компилируется. – Sweeper