Статические методы вызываемые через generic класса
Для создания каждого типа класса, мне нужно некое предварительное условие их создания для визуализации, которое я записал в статическом методе.
public abstract class ClassBase {
public static double ValueModifier (double value) {
return value;
}
}
public class ClassChildA : ClassBase {
public new static double ValueModifier (double value) {
return Math.Sign(value)*10;
}
}
public class ClassChildB : ClassBase {
public new static double ValueModifier (double value) {
return Math.Round(value/0.5)*0.5;
}
}
public class Printer<T> where T : ClassBase {
public double Print (double value) {
// T' is a type parameter, which is not valid in the given context
return T.ValueModifier(value);
// 'Type' does not contain a definition for 'ValueModifier' and no accessible extension method 'ValueModifier' accepting a first argument of type 'Type' could be found (are you missing a using directive or an assembly reference?)
return typeof(T).ValueModifier(value);
}
}
Как нужно написать метод Print?
Или лучше описывать эти условия в отдельных классах для каждого типа ClassChild?
Ответы (1 шт):
Автор решения: aepot
→ Ссылка
Вот так получается, только через рефлексию.
public double Print(double value)
{
return (double)typeof(T).GetMethod("ValueModifier").Invoke(null, new object[] { value });
}
Попробуем
static void Main(string[] args)
{
Console.WriteLine(new Printer<ClassChildA>().Print(-20.0));
Console.ReadKey();
}
Вывод
-10