将新方法添加到列表<;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
您可以将其定义为一种扩展方法:
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)
{
...
}
}