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

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Класс не может наследовать от других классов.

C.Evenhuis
источник
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 - Нет, вы не можете наследовать от статического или запечатанного класса

Smaiil
источник
4
Может быть, вы можете добавить небольшое объяснение этого.
Абдула