Почему абстрактный класс не может быть запечатан или статичен? и я запутать об этом вопросе Why declare static classes as sealed and abstract in C#?Почему абстрактный класс не может быть опечатан или статичен?
ответ
static
класс не может быть отмеченsealed
потому что это сделаноsealed
компилятором по умолчанию.Статические классы запечатаны и поэтому не могут быть унаследованы.
static
класс не может быть помечен какabstract
, потому что это было бы бессмысленно.abstract
класс имеет смысл, если вы хотите, чтобы все производные классы реализовали ту же часть логики. Но поскольку классstatic
не может быть получен, другой способ не будет реализовывать эти пробелы.Они не могут наследовать ни одного класса, кроме
Object
.
Обе цитаты из Static Classes and Static Class Members (C# Programming Guide).
C# спецификация немного более подробно о том, что:
10.1.1.3 Статические классы
static
класс не может включать в себя модификаторsealed
илиabstract
. Обратите внимание, однако, что поскольку классstatic
не может быть создан или получен из него, он ведет себя так, как если бы он был какsealed
, так иabstract
.
Вы можете прочитать, что это значит для класса быть sealed
или abstract
:
Абстрактный класс не может быть создан непосредственно, и это ошибка во время компиляции, чтобы использовать новый оператор на абстрактный класс
герметичный модификатор используется, чтобы предотвратить вывод из класса. Ошибка времени компиляции возникает, если закрытый класс указан как базовый класс другого класса.
Update
И слово о статье, связанной в запросе вы упомянули (Static Class Design). Об этом уже сказано в принятом ответе на этот вопрос.Если вы читали внимательно, то можно увидеть, что:
√ DO объявить
static
классов какsealed
,abstract
и добавьте конструктор вprivate
экземпляра, если ваш язык программирования не имеет встроенную поддержку для статических классов.
.NET (C# так, а) действительно имеют встроенную поддержку для статических классов, так что вы не имеете (и даже не может), чтобы сделать ваши классы псевдо-статические пометив его как sealed
и abstract
.
Я прочитал этот ответ @MarcinJuraszek, и я создал один запечатанный класс ** A ** и создаю еще один закрытый класс ** B **, который расширяет или наследует класс * A *, и без ошибок, как его возможно, если запечатанный класс не наследуется? – anomepani
Это не так. Попробуйте 'открытый закрытый класс A {}' и 'открытый закрытый класс B: A {}'. Вы получите * ''B': не может быть получено из сообщения об ошибке с закрытым типом' 'A'' *. – MarcinJuraszek
спасибо @MarcinJuraszek, ваше объяснение велико. Я получил свой ответ, я просто не знаю о ** статическом ** внутреннем определении, как будто он ведет себя как ** запечатанный ** и ** абстрактный **, потому что статический класс не создается как * абстрактный * класс и не может быть унаследован как * запечатанный * класс. – anomepani
- 1. Почему класс System.Random не статичен?
- 2. Почему класс журнала андроидов статичен?
- 3. Класс должен быть объявлен как абстрактный или реализовать абстрактный метод
- 4. Почему класс .NET Colors не статичен?
- 5. Почему абстрактный класс может иметь метод экземпляра?
- 6. абстрактный класс или интерфейс
- 7. Почему требуется абстрактный класс?
- 8. Может ли абстрактный класс быть внедрен в другой класс?
- 9. Абстрактный базовый класс или класс?
- 10. Почему абстрактный класс и интерфейс не могут быть созданы?
- 11. Общий или абстрактный класс?
- 12. Java - Анонимный класс статичен или нет
- 13. Почему Google Gson не статичен?
- 14. Почему этот метод статичен?
- 15. Почему статический класс не может быть создан
- 16. Почему класс не может быть загружен URLClassLoader?
- 17. Почему класс MDB не может быть окончательным
- 18. «Абстрактный класс не принимает параметры»: почему?
- 19. Может абстрактный класс быть добавлен в качестве подкласса Hashmap
- 20. Почему абстрактный абстрактный родительский класс при выполнении наследования в EF?
- 21. Шрифт абстрактный; Не может быть создан
- 22. Документ абстрактный; не может быть создан
- 23. Android Editable - абстрактный; не может быть экземпляр
- 24. trait Row - абстрактный; не может быть создан
- 25. Класс должен быть объявлен абстрактным или реализовать абстрактный метод
- 26. Насколько велика может быть класс или класс и быть практичным?
- 27. C++ не может создать абстрактный класс
- 28. Форма mvc не может создать абстрактный класс
- 29. Класс не абстрактный?
- 30. Класс не абстрактный, не переопределяет абстрактный метод
Взгляните на этот ответ от Michel Keijzers: http://stackoverflow.com/a/9213911/540653 –
что такое путаница? – Abhitalks
Абстрактный класс не может быть статическим, а другая сторона говорит, объявляет статический класс абстрактным, что это значит? @abhitals – anomepani