何时以及如何使用基于属性的编程

时间:2016-12-30 06:54:16

标签: c# oop reflection custom-attributes

我已经在使用自定义属性的C#中看到了许多ORM映射表/列到相应的类。甚至实体框架也以类似的方式进行。我试图弄清楚何时以及如何使用属性来使我的解决方案更易于管理,更高效和可扩展。

我认为它可能有用的一些问题陈述是 1.将表/视图映射到类

Table Employee{ Name, Age, salary, height}...
class Employee{Name, Age, Salary, Height}...
  1. 将KeyValue对/词典映射到类
  2. PersonAttributes{
    Column1, Column2
    "Age", "25"
    "Salary", "3000"
    "Weight", "80"
    ...
    }
    
    Class Person{
    string Name;
    
    [MapToTable(TableName="PersonAttributes", Key="Column1", Value="Column2",DataType="Int", Field="Age", )]
    int Age;
    
    [MapToTable(TableName="PersonAttributes", Key="Column1", Value="Column2",DataType="Int", Field="Weight", )]
    int Weight;
    
    [MapToTable(TableName="PersonAttributes", Key="Column1", Value="Column2",DataType="Int", Field="Salary", )]
    int Salary;
    }
    

1 个答案:

答案 0 :(得分:1)

Metaprogramming可用于装饰您的程序集成员(即程序集,类型......)和类型成员,以提供系统可以执行某些操作或以某种特定方式执行某些操作的提示。

实际上,在.NET中,属性是一种提供比修饰符更多语义的方法。例如:

  • publicprivateinternalprotected ......
  • implicitoperatoroverrides ...

稍后,使用反射,您可以自省装配和装配成员以基于它们设置环境。

例如,[Required]数据注释用于告知验证框架,OR / M或序列化程序,给定的类属性应强制包含值。

总之,我不会说属性只是用于描述映射语义,但它们是实现约定的强大工具或声明方法,以提供有关系统应如何工作的提示。 / p>