将新方法添加到列表<;T>;在由其制成的物体上

本文关键字:gt 添加 新方法 列表 lt | 更新日期: 2023-09-27 17:59:58

有没有办法在List对象中添加新方法,而不是它所由的对象。换句话说,类可以这样写吗?当List由它生成时,它会向该List添加新方法。这里有一个例子:

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

将新方法添加到列表<;T>;在由其制成的物体上

您可以将其定义为一种扩展方法:

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();

您所说的是一个扩展方法。您可以用C#3.0及更高版本编写它们。

您必须编写一个静态类来包含您的扩展方法,尽管它们不必都在同一个类中。然后,您可以像在最初的类定义中一样使用它们。

像这样:

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的代码正如您所期望的那样。

您可以编写一个扩展方法来实现sector01.OutputAll();

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