Кстати самое интересное, конструктор не создает экземпляр фактически, конструктор необходим для первоначальной инициализации, конструктор вызывается, когда экземпляр создан, в конструкторе вы не разместите код, который запретит создание экземпляра и не вернете другой. Оператор new и создает экземпляр.
AndNovak: Для начала бы почитали про паттерны, часто используют MVVM, Dependency Injection, Repository. Плюс деление приложения на слои(отчасти MVVM тоже делает это). Запрос WPF MVVM Entity framework в гугле выдал кучу примеров, посмотрите примеры, единственное там во всех примерах не вынесен слой данных в репозиторий или сервис ( на мой взгляд не всегда это надо, особенно если точно уверены, что БД всегда будет единственным хранилищем), по всем MVVM фреймворкам есть также описание и примеры.
Про ASP тут тоже не так все просто, и тенденции больше сводятся к WebAPI+SPA.
Алексей Немиро: Каких разновидностей то? если посмотреть на зоопарк C++ там еще хлеще, куча компиляторов, да и не всегда строго придерживаются спецификации. Я не мучаюсь, у меня ни разу не было, чтобы я не смог, что то собрать. Других производителей C# нет, Xamarin вместе с Mono куплены MS, остальные проекты (dotGNU) загнулись давно. Ну извините, язык развивается, естественно выходят новые версии, зоопарк этот неизбежен, эта картина не только у MS, это везде. Недавно надо было восстановить доступ к сайту на древней джумле (дело было в корпоративной сети), на хостинге стоял древний PHP, мне пришлось искать какая версия будет под ним работать. Это везде так. Не хотите, чтобы пользователи ваших проектов мучились, пишите на старых версиях, хотите последних достижений языка, предупреждайте в чем собирать. Вы под Linux ничего не собирали из исходников, когда какой нибудь калькулятор просит обновить Qt, пол KDE и так далее(немного утрировано, но все же)
babaevmm: для написания SPA приложений, в шаблоне уже есть настроенная авторизация, по кукисам и авторизация по токену (для SPA приложений). Те. пользователь авторизируется на сайте, и может получить токен для доступа к WebAPI.
Алексей Немиро: ну так это со всеми языками так, сложно требовать от старого компилятора поддержки новых фич. Тяжело же требовать от какого нибудь GCC 2012 года, поддержки С++14. Кстати MSBuild всегда использует самую свежую версию языка(ведь CIL будет совместим с любой версией .NET). А вам, чтобы лишний раз не мучатся, в свойствах сборки проекта, есть кнопка "Дополнительно", там принудительно можно указать, языковую версию для сборки.
Алексей Немиро: То, что вы привели - это не .Net 2.0 код, а .Net 4.6, как вы сами и написали, что нужна 6.0 версия языка. Естественно версии .Net имеют различия, и очень большие, вы еще от 2.0 проектов Linq потребуйте или асинхронность. Бардака никакого нет, это в любом языке(тяжело собрать программу С++14, компилятором который его не поддерживает). Проблема в том, что даже назначив целевую среду .Net 2.0, VS будет использовать компилятор последней версии. Выше приведенный код, спокойно собирается в VS, но не собирается если непосредственно вызвать компилятор 2.0.
Алексей Немиро: Какой прочий зоопарк? Версия .Net и определяет версию C#. Вы уже запутались сами. ISO/ECMA не определяют спецификацию языка, скажем как это выглядит в случае C++. Спецификацию языка сейчас определяет только MS, а не ISO/ECMA, так как C# и .Net развивается только MS, а остальные только догоняют. Так и не понял про, что это: "Всякие фишки добавляемые в Visual Studio - это тоже серьезная проблема. Например из последнего, интерполированные строки ($"hello {username}") можно использовать в коде любой версии C#, но только в Visual Studio 2015, со всеми вытекающими последствиями". Какие последствия? Какие фишки? То, что с новыми возможностями языка нормально работают лишь последние версии VS, так это нормально, это фактически зависит от того, что в IntelliSence студии заложено.