Первичные конструкторы больше не компилируются в VS2015


98

До сих пор я мог использовать первичные конструкторы, такие как:

public class Test(string text)
{
    private string mText = text;
}

Чтобы сделать это, в предыдущей версии Visual Studio CTP мне пришлось добавить это в csproj-файл:

<LangVersion>Experimental</LangVersion>

Во всяком случае, это больше не работает в предварительной версии Visual Studio 2015 (с или без LangVersion). Есть ли у кого-нибудь идеи о том, что может происходить?


6
Они говорят об удалении его здесь
Jonesopolis

15
Я единственный, кто считал эту функцию бессмысленной? Я так и не нашел в этом реальной пользы.
TyCobb

2
Было немного неловко, но мне нравится философия, лежащая в основе этого!
Matko

14
Это позор. Но вы можете свободно использовать первичные конструкторы после перехода на F #. Переходите на F #, csharpers, ваши новые языковые функции уже есть;)
scrwtp

3
@TyCobb, первичные конструкторы абсолютно необходимы при внедрении зависимостей: вы можете использовать внедрение конструктора (в отличие от внедрения свойств), не повторяя имя (и тип) каждой зависимости четыре раза.
Федор Сойкин

Ответы:


143

Есть ли у кого-нибудь идеи о том, что может происходить?

Ага - основные конструкторы были удалены из планов для C # 6. Они вполне могут появиться в той или иной форме в более поздних версиях, но их больше нет в C # 6.

См. Сообщение команды «Изменения в наборе языковых функций» для получения более подробной информации.


Это действительно печально! Они казались весьма полезными.
Пер Лундберг

@PerLundberg: Их тоже нет в C # 7. Я подозреваю, что группа разработчиков C # пересмотрит типы записей в C # 8, но это не значит, что они определенно добьются этого.
Джон Скит

Будем надеяться на лучшее. :) Я видел, что они упоминались в некоторых публикациях на C #, да, и это выглядело как еще один интересный способ попробовать решить проблему "простого класса".
Пер Лундберг
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.