Добавление нового метода в List <T>поверх объекта, из которого сделан - PullRequest
3 голосов
/ 20 июня 2011

Есть ли способ добавить новый метод в объект 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

Ответы [ 3 ]

8 голосов
/ 20 июня 2011

Вы можете определить его как метод расширения :

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();
2 голосов
/ 20 июня 2011

То, о чем вы говорите, это метод расширения .Вы можете написать их в 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 такой же, как вы ожидали.

1 голос
/ 20 июня 2011

Вы можете написать метод расширения для достижения sector01.OutputAll();.

    static class EmployeeListExtensions
    {
        public static void OutputAll(this IEnumerable<Employee> employeeList)
        {
            ...
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...