【Microbar 】Asp.net 類中使用中括號([......])的作用

iDotNetSpace發表於2008-07-24
對於類似於這樣的說明標記[System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethod
Type.Delete, true)]
該標記不起任何實際作用,僅是告訴vs該語句下面的方法(Method)是ObjectDataSource的預設繫結方法

標記的作用是為了讓編譯器更好的為ObjectDatasource嚮導找到合適的方法


下面的程式碼示例演示如何將 DataObjectMethodAttribute 屬性應用於一個公共公開的方法,並標識該方法所執行的資料操作型別及該方法是否是該型別的預設資料方法。在此示例中,NorthwindData 型別公開兩個資料方法:一個方法名為 GetAllEmployees,用於檢索一組資料;另一個方法名為 DeleteEmployeeByID,用於刪除資料。將 DataObjectMethodAttribute 屬性同時應用於這兩個方法,將 GetAllEmployees 方法標記為“Select”資料操作的預設方法,將 DeleteEmployeeByID 方法標記為“Delete”資料操作的預設方法。
C#
 複製程式碼
[DataObjectAttribute]
public class NorthwindData
{  
  public NorthwindData() {}

  [DataObjectMethodAttribute(DataObjectMethodType.Select, true)]
  public static IEnumerable GetAllEmployees()
  {
  AccessDataSource ads = new AccessDataSource();
  ads.DataSourceMode = SqlDataSourceMode.DataReader;
  ads.DataFile = "~//App_Data//Northwind.mdb";
  ads.SelectCommand = "SELECT EmployeeID,FirstName,LastName FROM Employees";
  return ads.Select(DataSourceSelectArguments.Empty);
  }

  // Delete the Employee by ID.
  [DataObjectMethodAttribute(DataObjectMethodType.Delete, true)]
  public void DeleteEmployeeByID(int employeeID)
  {
  throw new Exception("The value passed to the delete method is "
  + employeeID.ToString());
  }
}

解釋一下各位對於那些方括號的疑問,那個東西叫做Attribute(中文不知道該翻譯成什麼比較合適),主要是反射的時候用,本文中的這些Attribute非常的簡單,僅僅是告訴反射的使用者這個方法是幹什麼用的,以及是不是預設使用這個方法(似乎有些拗口,我們還是舉例子吧) 

e.g. 
[System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Select, true)] 
public Northwind.ProductsDataTable GetProducts() 

return Adapter.GetProducts(); 

其中,System.ComponentModel.DataObjectMethodType.Select說明這是一個用於Select的方法,true說明這是預設的用於Select的方法 

所以,相對的 
[System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Select, false)] 
public Northwind.ProductsDataTable GetProductByProductID(int productID) 

return Adapter.GetProductByProductID(productID); 

就說明這是一個用於Select的方法,但是它不是預設的用於Select的方法 


需要說明的是,上面所討論的System.ComponentModel.DataObjectMethodAttribute是針對ProductsBLL而言的,也就是說當反射ProductsBLL的時候,這些東西就可以用了(注意:ProductsBLL是被標記為System.ComponentModel.DataObject的一個類,所以才可以用這些Attribute,否則會出問題的) 

再簡要的說明一下“反射”,我們在往設計器裡面新增一個控制元件後,都可以使用屬性視窗,這個屬性視窗裡面能顯示這個控制元件的一些相關的東西,這個就是反射一種用法

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-409984/,如需轉載,請註明出處,否則將追究法律責任。

相關文章