【发布时间】:2012-02-06 15:56:26
【问题描述】:
我有一个这样定义的类:
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 值这样的东西,所以我必须使用属性。
那么我可以用什么来代替那些???s 来取回“int”(假设其中一个字段是UniformInt)。
顺便说一句:如何将fields 限制为仅继承Uniform<> 的字段类型?
【问题讨论】:
标签: c# reflection introspection