Метод расширения для общего класса

Возможные дубликаты:
C# — универсальный метод расширения
Как написать расширение C# Метод для универсально типизированного класса

Можно ли объявить методы расширения для универсальных классов?

public class NeedsExtension<T>
{
    public NeedsExtension<T> DoSomething(T obj)
    {
        // ....
    }
}

person Will    schedule 18.02.2010    source источник


Ответы (4)


Чтобы расширить любой класс

public static class Extensions
{
    public static T DoSomething<T>(this T obj)
    {
        //...
    }
}

Чтобы расширить конкретный общий класс

public static NeedExtension<T> DoSomething<T>(this NeedExtension<T> obj)
{
    //...
}
person Stan R.    schedule 18.02.2010
comment
Для меня я забыл ‹T› после NeedExtension. В частности, я хотел написать расширение для универсального класса Dictionary, поэтому мне понадобился ‹TKey,TValue›. - person Vincent Vancalbergh; 10.10.2018

Да, но вы забыли ключевое слово this. Посмотрите на Queryable, который предоставляет все операторы LINQ для коллекций.

person Johannes Rudolph    schedule 18.02.2010

Конечно

public static void SomeMethod<T>(this NeedsExtension<T> value) {
  ...
}
person JaredPar    schedule 18.02.2010

Как написать Метод расширения C# для общего типизированного классаss

public static class NeedsExtension<T>
{
    public static string DoSomething <T>(this MyType<T> v)
    {   return ""; }

    // OR
    public static void DoSomething <T>(this MyType<T> v)
    {   
         //...
    }
}
person Asad    schedule 18.02.2010
comment
этот код не скомпилируется - person Dmitry Efimenko; 22.12.2013
comment
Метод расширения должен быть статическим методом, который не может быть универсальным. - person Marek Woźniak; 14.04.2015
comment
Ошибка компилятора: метод расширения должен быть определен в неуниверсальном статическом классе. - person Nebula; 30.07.2015
comment
Это не компилируется, потому что методы расширения должны находиться в статическом неуниверсальном классе. - person Alessandro Farace; 24.07.2017
comment
Ваш класс должен быть статичным. - person sina_Islam; 15.08.2017