Статические и Запечатанные классовые различия


150
  1. Есть ли класс, который будет реализован в статическом классе? средства:

    static class ABC : Anyclass
  2. Есть ли класс, который может быть унаследован как в запечатанном, так и в статическом классе?
    средства:

    static class ABC : AClass {}

    И

    sealed class ABC : AClass {}

Могу ли я быть неправым в какой-то степени?


staticне имеет ничего общего сsealed
ken2k

1
Но @ ken2k, статические классы по умолчанию закрыты в C #. Не так ли? статические классы вообще не участвуют в наследовании.
RBT

Ответы:


654

Это может помочь вам:

+--------------+---+-------------------------+------------------+---------------------+
|  Class Type  |   | Can inherit from others | Can be inherited | Can be instantiated | 
|--------------|---|-------------------------+------------------+---------------------+
| normal       | : |          YES            |        YES       |         YES         |
| abstract     | : |          YES            |        YES       |         NO          |
| sealed       | : |          YES            |        NO        |         YES         |
| static       | : |          NO             |        NO        |         NO          |
+--------------+---+-------------------------+------------------+---------------------+

1
Потрясающие. Спасибо за быстрый ответ @HosseinNarimaniRad. Утром я проголосовал за вас, так как информация в любом случае была правильной, но это была просто проблема с форматированием. Кстати, ваш ответ заслуживает того, чтобы быть принятым ответом с момента его публикации, но, похоже, нам придется больше ждать этого :)
RBT

Сортировать интересно думать о других типах, основываясь на этом. Как некоторые, root classкоторые могут быть унаследованы и созданы, но не могут наследовать. Не уверен, почему это было бы полезно, но все же
AustinWBryan

static class Foo : object { }действительно, но по сути static class Foo { }.
themefield

39

Простыми словами

Статический класс

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

Запечатанный Класс

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


19

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

sealed class MySealedClass : BaseClass // is ok
class MyOtherClass : MySealedClass     // won't compile

staticКласс не может наследовать от других классов.


3

Вы можете просто дифференцировать их обоих как:

       Sealed Class       |        Static Class
--------------------------|-------------------------
it can inherit From other | it cannot inherit From other
classes but cannot be     | classes as well as cannot be
inherited                 | inherited

3

Простой ответ закрытого класса не может быть использован в качестве базового класса .

Я пытаюсь показать вам запечатанный класс является производным классом в приведенном ниже коде

 public sealed class SealedClass : ClassBase
{
    public override void Print()
    {
        base.Print();
    }
}

и другая закрытая функция доступна только с экземпляром из него (вы не можете наследовать от него)

 class Program
{
    static void Main(string[] args)
    {
        SealedClass objSeald = new SealedClass();
        objSeald.Name = "Blah blah balh";
        objSeald.Print();

    }
}

1

Запечатанные классы:

  1. Может создавать экземпляры, но не может наследовать
  2. Может содержать как статические, так и нестатические элементы.

Статические классы:

  1. Не может ни создавать свои экземпляры, ни наследовать их
  2. Может иметь только статические члены.

0

1 - Нет, вы не можете реализовать статический класс.

2 - Нет, вы не можете наследовать от статического или запечатанного класса


4
Может быть, вы можете добавить небольшое объяснение этого.
Абдула
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.