Почему я не могу наследовать статические классы? - PullRequest
206 голосов
/ 21 апреля 2009

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

Но, похоже, я не могу объявить наследование для статических классов.

Примерно так:

public static class Base
{
}

public static class Inherited : Base
{
}

не будет работать.

Почему разработчики языка закрыли эту возможность?

Ответы [ 12 ]

0 голосов
/ 22 сентября 2013

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

0 голосов
/ 12 августа 2011

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

Класс может быть объявлен статическим, что означает, что он содержит только статические члены. Невозможно использовать ключевое слово new для создания экземпляров статического класса. Статические классы автоматически загружаются средой выполнения (CLR) .NET Framework при загрузке программы или пространства имен, содержащих этот класс.

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

Ниже приведены основные характеристики статического класса:

  1. Они содержат только статические элементы.

  2. Их невозможно создать.

  3. Они запечатаны.

  4. Они не могут содержать конструкторы экземпляров (Руководство по программированию в C #).

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

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

Статические классы запечатаны и поэтому не могут наследоваться. Они не могут наследовать ни от какого класса, кроме Object. Статические классы не могут содержать конструктор экземпляра; однако они могут иметь статический конструктор. Для получения дополнительной информации см. Статические конструкторы (Руководство по программированию в C #).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...