Есть ли планы на «свойства расширения» в будущей версии C #? - PullRequest
5 голосов
/ 17 марта 2009

Я думал об этом раньше, и это снова пришло в голову при чтении этого вопроса.

Есть ли планы на "свойства расширения" в будущей версии C #?

Мне кажется, что они могут быть довольно простыми для реализации с небольшим количеством "магии компилятора". Например, использование префиксов get_ и set_ для имен методов расширения превратит этот метод в свойство расширения:

    public class Foo
    {
        public string Text { get; set; }
    }
    public static class FooExtensions
    {
        public static string get_Name(this Foo foo)
        {
            return foo.Text;
        }
        public static void set_Name(this Foo foo, string value)
        {
            foo.Text = value; 
        }
    }

Существуют ли какие-либо технические ограничения, которые могли бы предотвратить это? Будет ли это создавать слишком много вещей, происходящих за кулисами? Не достаточно важно, чтобы стоить усилий?

Ответы [ 6 ]

7 голосов
/ 17 марта 2009

Официальный сайт для запросов функций: http://connect.microsoft.com/VisualStudio.

Уже был запрос на расширение свойств здесь .

Ответ Microsoft от 29.07.2008 включал следующее:

Свойства расширения являются общими запрос, и мы на самом деле получили довольно далеко с дизайном для следующей версии язык, но в конечном итоге пришлось лом это из-за различных трудности. Это все еще на нашем радар.

6 голосов
/ 17 марта 2009

Как правило, я думаю, что это будет способствовать плохой практике. Предполагается, что свойства представляют какое-то состояние относительно рассматриваемого объекта, тогда как методы должны представлять единицы работы. Но многие разработчики склонны помещать интенсивный в вычислительном отношении или относительно долго работающий код в методы получения и установки, где они будут гораздо более подходящими в качестве методов. Расширение объекта не - это то же самое, что и его получение. Если вам нужно добавить свойства, с философской точки зрения вы говорите о необходимости добавить информацию о состоянии объекта. Это должно быть сделано производным от класса.

3 голосов
/ 17 марта 2009

Хотя я не думаю, что то, что вы предлагаете, является хорошей идеей, вы можете получить почти то же самое с наступающим типом dynamic в C # 4. Часть того, что планируется сделать, - разрешить новые свойства и методы быть добавленным во время выполнения к существующим объектам и типам. Единственное отличие состоит в том, что у вас не будет проверки во время компиляции свойства расширения.

2 голосов
/ 17 марта 2009

Можно сказать что-то о подобной уловке.

Просто посмотрите Прикрепленные свойства в WPF. Они дают огромные возможности для декларативного поведения. Но я не уверен, как это будет выглядеть вне декларативного контекста ...

0 голосов
/ 17 марта 2009

«Свойства расширения» доступны сегодня по наследству. Добавление такого зверя будет поощрять плохие методы работы и, как правило, доставит больше хлопот, чем стоит.

0 голосов
/ 17 марта 2009

Я не уверен, как это будет работать. Расширения должны быть статическими, поэтому само свойство должно быть статическим. Средства, которые вы используете для поддержки этих свойств, также будут статическими. Но ожидайте, что ваше запланированное использование для них предполагает, что они будут связаны с экземплярами, указанными ключевым словом this, а не самим типом.

...