Подтвердить что ты не робот

Почему Visual Studio по умолчанию не создает публичный класс?

В Visual Studio при добавлении нового класса он всегда создается без модификаторов и делает класс внутренним.

class MyClass
{
}

Я бы предпочел, чтобы мой класс по умолчанию был создан как открытый.

Почему он по умолчанию является внутренним?

Что вы предпочитаете?

4b9b3361

Ответ 1

Создание класса internal по умолчанию имеет для меня смысл: держите своих рядовых в себе и только явно выставляйте части, которые действительно нужно разоблачить: все остальное является лишь деталями реализации и не должно быть видимым для внешнего мира.

Если вы хотите протестировать свои классы internal,.NET 2.0 начинает вводить новый атрибут InternalsVisibleToAttribute, который

Указывает, что типы, которые обычно видны только внутри текущей сборки, видны другой сборке.

Если это вас действительно раздражает, см. %ProgramFiles%\Microsoft Visual Studio 8\Common7 IDE\ItemTemplates\CSharp\1033\Class.zip. Это шаблон, который вы можете изменить в соответствии с вашими потребностями. ReSharper имеет схожие возможности, но он напрямую доступен изнутри пользовательского интерфейса.

Ответ 2

С# имеет значение по умолчанию для всего необходимого минимального объема. Это хорошая конвенция и цитируется в книге Скита (С# In Depth, p 224 "Note/Trivia" ):

[Свойства - это] только место, где требуется "private". В любом месте в С# модификатор доступа по умолчанию в любой конкретной ситуации является наиболее приватным. Другими словами, если что-то можно объявить частным, то отказ от модификаторов доступа полностью по умолчанию будет закрыт. Это хороший элемент дизайна языка, потому что его трудно ошибиться случайно: если вы хотите, чтобы что-то было более публичным, чем это, вы заметите, когда попытаетесь его использовать.

Ответ 3

Чтобы создать открытый класс по умолчанию для Visual Studio 2012:

Редактировать этот файл: C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\ItemTemplates\CSharp\Code\1033\Class\Class.cs

Чтобы выглядеть так:

using System;
using System.Collections.Generic;
$if$ ($targetframeworkversion$ >= 3.5)using System.Linq;
$endif$using System.Text;
$if$ ($targetframeworkversion$ >= 4.5)using System.Threading.Tasks;
$endif$
namespace $rootnamespace$
{
    public class $safeitemrootname$
    {
    }
}

Дополнительная информация: http://aaron-hoffman.blogspot.com/2013/05/edit-default-visual-studio-2012-item.html

Ответ 4

Я предпочитаю это так, как есть. Таким образом, вы должны осознанно решить, что хотите, чтобы он был открыт для публики. Это очень похоже на аргумент, вы хотите, чтобы ваш компьютер был открыт для внешнего мира по умолчанию, или вы бы скорее настроили его для доступа к Интернету самостоятельно.

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

Ответ 5

Потому что в С# по умолчанию класс является внутренним. Поэтому VisualStudio следует за спецификацией С#.

В следующей статье объясняются модификаторы доступа и видимость по умолчанию на С#.

http://msdn.microsoft.com/en-us/library/ms173121.aspx

Ответ 6

Интересно, что это происходит только в С# - в vb.net вы получаете общедоступный класс по умолчанию.

Лично я предпочитаю публичный класс по умолчанию, так как обычно другим классам нужен доступ к нему. (большая часть моей работы находится в слое данных)

Ответ 7

Вы можете изменить шаблоны для класса С# - Обычно находится в "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VС#"

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

Ответ 8

Лично я предпочитаю это как есть, он заставляет вас активно думать, какие классы вы хотите обнародовать.

В конечном итоге он по умолчанию ставит вас в надежно более чистый дизайн API и, следовательно, более дружественное программное обеспечение. Вы не хотели бы раскрывать внутреннюю работу вашего кода, что неизбежно произойдет, если все будет отключено публично.

Это несколько субъективно, лично я предпочитаю, чтобы все было выключено и включало только то, что мне не нужно, наоборот.

Ответ 9

Это хорошая практика во всех областях кода, чтобы как можно более ограниченные возможности. Без конкретной причины быть иначе, все должно быть частным, readonly (лучше еще const) и статическим. Если переменная, метод или свойство могут быть закрытыми, сделайте их закрытыми. Если он не может быть закрытым, но его можно защитить, сделайте его защищенным. Если он может быть только для чтения, сделайте его только для чтения. Если он может быть статическим, сделайте его статичным. То же самое верно для классов: они должны быть внутренними по умолчанию и публиковаться только тогда, когда вы решили, что это класс, который вы хотите экспортировать.