二、Attribute的使用:
Attribute中文翻譯雖然也號稱“ 屬性”,但是她和對象的屬性(Property)其實是完全不同的兩概念。她 是在運行時對對象或者對象屬性、方法、委托等等進行描述的類,用於在運行時 描述你的代碼或者在運行時影響你的程序的行為。
其實我們在c#的編程 中經常看到Attribute,只不過我們沒有注意罷了。比如Main函數前的“ [STAThread]”這個其實就是一個Attribute。全程為 [STAThreadAttribute]。另外指定類可序列化的[Serializable]等等。是不是都 很熟悉啊?只不過平時估計沒有用到,所以沒有注意罷了。
既然 Attribute是類,那麼她的定義方法和類就沒有兩樣了,唯一的不同就是自定義 Attribute類必須繼承於System.Attribute。
下面我們來簡單定義一個描 述數據庫字段信息的Attribute,在此類中我們采用更省略的方式,僅僅提供 “字段名”,“字段類型”:
public class DataFIEldAttribute : Attribute
{
private string _FIEldName;
private string _FIEldType;
public DataFieldAttribute(string fieldname, string fIEldtype)
{
this._FieldName = fIEldname;
this._FieldType = fIEldtype;
}
public string FIEldName
{
get { return this._FIEldName; }
set { this._FIEldName = value; }
}
public string FIEldType
{
get { return this._FIEldType; }
set { this._FIEldType = value; }
}
}
好,我們有了自己的描述數據庫字段的Attribute,那麼我們現 在將其應用到實際的類中。我們還是繼續上面的Person類,使用方法如下:
public class Person
{
private string _Name;
private int _Age;
private string _Sex;
[DataFIEldAttribute("name", "nvarchar")]
public string Name
{
get { return this._Name; }
set { this._Name = value; }
}
[DataFIEldAttribute("age", "int")]
public int Age
{
get { return this._Age; }
set { this._Age = value; }
}
[DataFIEldAttribute("sex", "nvarchar")]
public string Sex
{
get { return this._Sex; }
set { this._Sex = value; }
}
}
通 過自定義Attribute,我們定義了類屬性和數據庫字段的一一對應關系,我們對 Person類的Name、Age、Sex屬性都加上了Attribute的描述,指定了他們對應的 字段名以及類型,其中Person.Name對應於字段name,字段類型Nvarchar...。