Создание метода расширения в проекте .Net 2.0, компиляция с C # 4.0 - PullRequest
4 голосов
/ 24 января 2012

У меня есть старый продукт, который мне нужно обновить, написанный на C # и .Net 2.0.Проект был обновлен для работы с Visual Studio 2010 (которая включает в себя компилятор C # 4.0), но я не могу обновить фреймворк с версии 2.0 до более поздней версии.

Я нашел несколько статей (например, этот вопрос ), который был написан во время VS 2008, который поставлялся с компилятором C # 3.0, утверждая, что вы можете создавать свои собственные методы расширения, определяя свой собственный класс атрибута метода расширения для проектов, которые были написаны с помощью инфраструктуры 2.0,Тем не менее, я не могу найти какую-либо ссылку, утверждающую, если это все еще необходимо с использованием C # 4.0 в проекте .Net 2.0.

В моем проекте мне все равно нужно будет определить пользовательский класс атрибута расширения или он имеетКомпилятор C # 4.0 был улучшен, чтобы он мог упростить процесс?

1 Ответ

3 голосов
/ 24 января 2012

Кажется, я не могу найти какую-либо ссылку, подтверждающую, что это все еще необходимо при использовании C # 4.0 в проекте .Net 2.0.

Да, это так.Компилятору нужен этот атрибут.Определите ли вы это сами или используете тот, который указан в System.Core, зависит от вас.Хотя в вашем конкретном случае System.Core не вариант, так как это только часть .NET 3.5.

После обновления до более поздней версии 3.5 или более поздней вы можете безопасно удалить этот атрибут из вашего проекта.все вместе и просто используйте один в System.Core.

Если вы обновились до Visual Studio 2010;тогда вы используете компилятор C # 4.0.Это означает, что все, что вам нужно, это ExtensionAttribute:

namespace System.Runtime.CompilerServices
{
    [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]
    public class ExtensionAttribute : Attribute
    {
    }
}

Это должно находиться в этом точном пространстве имен.

Как только вы это где-то получите, вы можетеобъявите метод расширения обычным способом (поскольку вы используете компилятор C # 4.0):

public static class Extensions
{
    public static string ToTitleCase(this string str)
    {
        //omitted
    }
}

, а затем используйте его как метод расширения:

var str = "hello world";
str.ToTitleCase();

Вы сами этого не делаетена самом деле когда-либо нужно поставить ExtensionAttribute на что-либо;компилятор C # 4.0 сделает это за вас.По сути, все, что нужно компилятору, - это найти атрибут с именем ExtensionAttribute.

...