属性与静态属性

时间:2016-06-13 12:44:20

标签: c# reflection

我有一个需要保存到MongoDB集合中的模型。要获得集合名称,我有两个选择。

1)属性

我使用自定义属性修饰类,并使用反射来访问其中的值。然后我可以使用type对其进行缓存,以避免将来查找。

[MongoCollection("Foo")]
public class Foo
{
}

2)静态属性

这里我在类中有一个包含集合名称的静态属性。

public class Foo
{
    public static string CollectionName { get { return "Foo"; } } 
}

我发现我倾向于选择前者,因为它看起来和感觉更干净但是这里的一些高级开发人员正在利用反射。

是否有第一种选择的情况,或者最好选择2?

1 个答案:

答案 0 :(得分:5)

这是元数据与数据的明显案例:

  • 选项1:属性应该持有元数据关于它们所附加的实体。
  • 选项2:成员字段和属性,无论是实例还是静态,都应该保存构成类的整数值的数据

因此,选项1属性是表示元数据的正确方法。反射的使用仅仅是技术性的,可以封装到一个单独的类中,例如一个AttributeManager,可以简化对元数据的访问并适当地缓存它们以避免性能开销(在特定情况下应该是一个问题)。