У меня есть класс, определенный следующим образом:
public abstract class Uniform<T>
{
public abstract string GlslType { get; }
...
}
Затем подкласс определяется следующим образом:
public class UniformInt : Uniform<int>
{
public override string GlslType
{
get { return "int"; }
}
}
А затем метод в другом месте, который выглядит так:
public static string GetCode<T>()
{
var sb = new StringBuilder();
var type = typeof(T);
sb.AppendFormat("struct {0} {{\n", type.Name);
var fields = type.GetFields(BindingFlags.Public | BindingFlags.Instance);
foreach(var f in fields)
{
sb.AppendFormat(" {0} {1};\n", f.FieldType.GetProperty("GlslType").GetValue(???), f.Name);
}
...
}
У меня проблемы с заполнением ???
s. Я считаю, что GetValue
ожидает экземпляр объекта, но мне все равно, что это за экземпляр, потому что все они возвращают одно и то же значение. И AFAIK не существует такой вещи, как значение public abstract static readonly
, поэтому я должен использовать свойства.
Итак, что я могу поставить вместо этих ???
, чтобы вернуть "int" (при условии, что одно из полей было UniformInt
).
В качестве стороны: как я могу ограничить fields
только типами полей, которые наследуют Uniform<>
?