2010-02-22 1 views
5

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

public sealed class ParseFile 
    { 
     /// <summary> 
     /// Remove the public constructor to satisfy CA1053. 
     /// </summary> 
     private ParseFile() 
     { 
     } 
    } 

ответ

11

Вы не получаете это предупреждение, потому что класс запечатан, а потому что он (эффективно) статический класс.

Открытый конструктор предполагает, что класс имеет методы экземпляра - классы, которые не должны рекламировать иначе.

6

Если у вас есть класс, который имеет только общие методы, почему вам нужно создать экземпляр этого?

Примером класса с общими методами является класс System.Math. Он имеет частный конструктор, так как он добавляет никакой выгоды (и это не имеет смысла) для его можно создать.

EDIT: источник http://social.msdn.microsoft.com/Forums/en-US/vstscode/thread/8addbc70-f720-4d0b-85ce-2bdf52e32f77

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

+1

Вы забыли указать ссылку источника: http://social.msdn.microsoft.com/Forums/en-US/vstscode/thread/8addbc70-f720-4d0b-85ce-2bdf52e32f77 – 2010-02-22 15:41:16

+1

true (румяна) ... Еще есть немного от меня тоже .... – anthares

14

Если есть только статические методы, объявите его как статический класс и перестаньте беспокоиться о конструкторах.

public static class ParseFile 
{ 
} 
2

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

3

Запечатанный не такой, как статический. Статический класс означает, что вы не можете создать экземпляр класса с новым ключевым словом. Запечатанный класс означает, что вы не можете создать класс, который наследуется от него.

+0

Хорошая точка. Я не обратил на это внимания. –

+2

Возможно, вы уже знаете это, но 'static' - это C# sugar для объявления класса закрытого абстрактного класса. :) Спецификация языка C# добавляет дополнительное ограничение, что тип содержит только статические элементы из-за того, что члены экземпляра закрытого абстрактного типа никогда не будут вызываться. –

+0

@ 280Z28 вы уверены ?? Я пробовал объявить о закрытом абстрактном классе и получил ошибку компиляции, говоря, что абстрактный класс не может быть запечатан или статический – Pedro

Смежные вопросы