c# - 属性与静态属性

标签 c# reflection

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

1) 属性

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

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

2) 静态属性

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

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

我发现我倾向于选择前者,因为它看起来和感觉更干净,但这里的一些高级开发人员对反射的使用嗤之以鼻。

第一个选项是否有道理,还是选择第二个选项更好?

最佳答案

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

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

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

关于c# - 属性与静态属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37790195/

相关文章:

c# - 如何使用C#在POST请求中发送json数据

Java 反射 : How can I get the all getter methods of a java class and invoke them

java - 如何使用调试日志信息动态生成堆栈帧

.net - 为什么 .Net 中没有 System.ClassNotFoundException?

.net - 如何通过反射引用字段

c# - 如何在报表中使用表单控件属性?

c# - 如何使用相同的键向 StringValues 数组添加新值,从而修改我的 Uri?

c# - 以编程方式使用用户控件

c# - 使用 Entity Framework 将记录插入表中

c# - 使用 NLog 配置 API 写入 ApplicationData 文件夹