2011-06-20 48 views
3

構成的對象是否有方法將List方法添加到它所構成的對象上。換句話說,可以在編寫List時以這種方式編寫類從它那裏增加新的方法到該列表。下面是一個爲例:將新方法添加到列表<T>上方的對象是由

class Employee 
{ 
    public int age; 
    public Employee(int age) 
    { 
     this.age = age; 
    } 
    //some more code here... 
} 

然後:

List<Employee> sector01 = new List<Employee>(){new Employee(22), new Employee(35)}; 
sector01.OutputAll(); //Adds method like this 

回答

8

你可以將它定義爲extension method

namespace SomeNamespace 
{ 
    public static class ListExtensions 
    { 
     public static void OutputAll(this IEnumerable<Employee> employees) 
     { 
      foreach (var employee in employees) 
      { 
       Console.WriteLine("{0}: {1}", employee.FirstName, employee.LastName); 
      } 
     } 
    } 
} 

,然後簡單地把其中該靜態類被定義爲範圍的命名空間:

using SomeNamespace; 

,現在你就可以做到這一點:

List<Employee> sector01 = new List<Employee>() 
{ 
    new Employee(22), 
    new Employee(35) 
}; 
sector01.OutputAll(); 
1

你可以寫一個擴展方法都實現sector01.OutputAll();

static class EmployeeListExtensions 
    { 
     public static void OutputAll(this IEnumerable<Employee> employeeList) 
     { 
      ... 
     } 
    } 
2

你在說什麼是extension method。你可以寫在C# 3.0 and above

你必須編寫一個靜態類來包含你的擴展方法,儘管它們不需要全都在同一個類中。然後,您可以像使用初始類定義一樣使用它們。

像這樣:

public static class ListExtensions 
{ 
    public static void OutputAll<T>(this List<T> list) 
    { 
     //do something 
    } 
} 

然後調用代碼可以去任何地方,可以訪問ListExtensions類:

List<Employee> sector01 = new List<Employee>(){new Employee(22), new Employee(35)}; 
sector01.OutputAll(); 

正如你看到的,代碼調用OutputAll就如你預期。

相關問題