[编辑删除我需要访问 .net 属性(副成员变量)的暗示]
我正在尝试使用.net(具体来说是用C#编码的WPF)创建一个设计模式,其中类的实例(从基类派生)具有可以通过在方法调用中传递枚举值来访问的成员变量. 例如myObject.GetValueOf(dimensionFields.Latitude)
将返回 myObject 持有的“纬度”值。显然,目的是GetValueOf([some enum variable])
在运行时访问由枚举定义的许多字段值中的任何一个。我还需要相当高的性能,因为当许多(可能很容易超过 100,000 个)对象被绘制到显示器(通过 OpenGL)时,将访问这些值。
由于性能要求,我不愿意使用反射——这是一个合理的不情愿吗?
我有一个解决方案,但我的问题是:“他们是更好或更简单的方法吗?”
这是我当前的解决方案:我将为我想要访问的每种类型的成员变量创建枚举(即,一个用于双精度数,一个用于整数,一个用于字符串,一个用于布尔值等)。我的对象的基类将具有对应于每种变量类型的字典(例如,Dictionary<FieldsForDoubles, double> m_doubleDict
)。该基类中的GetValueOf([some enum value])
方法将被重载以接受每种类型的枚举并返回适当的数据类型(例如,public double GetValueOf(FieldsForDoubles field)
)。为方便起见,派生类可以添加实际属性(例如,Latitude
属性),但这些属性将简单地访问适当的字典。
最后,作为一次短途旅行,我可能会通过字符串值而不是枚举值来访问字典,让该GetValueOf
方法通过使用访问字典someEnumValue.ToString()
并提供通用方法 ( GetVaueOf<type>(string variableName)
) 以允许某些派生类保存不在当前枚举中的变量但可以通过非常相似的模式访问(例如,我可以使用GetValueOf<double>([some variable name])
访问任何使用此模式的变量)
任何人都看到这种方法的问题(例如,访问相当短的字典不是那种费用,对吧?)?关于如何做到这一点的任何其他想法?
提前致谢。