정적 및 밀봉 클래스 차이


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에 감사드립니다. 정보가 어쨌든 정확하기 때문에 아침 자체에서 당신을 찬성했지만 그것은 형식 문제 일뿐입니다. Btw, 귀하의 답변은 게시 된 순간부터 답변이 될만한 가치가 있지만, 더 기다려야 할 것 같습니다 :)
RBT

이것을 기반으로 다른 유형을 생각하는 것이 흥미 롭습니다. 일부처럼 root class상속과 인스턴스 만 상속 할 수 없습니다 할 수있다. 확실하지 이유는 여전히 유용 할 수 있지만 것
AustinWBryan

static class Foo : object { }유효하지만 기본적으로 static class Foo { }입니다.
themefield

39

간단한 말로

정적 클래스

정적 멤버 만 포함하고 있음을 나타내는 클래스를 static으로 선언 할 수 있습니다. new 키워드를 사용하여 정적 클래스의 인스턴스를 작성할 수 없습니다. 정적 클래스는 클래스가 포함 된 프로그램 또는 네임 스페이스가로드 될 때 .NET Framework CLR (공용 언어 런타임)에 의해 자동으로로드됩니다.

봉인 된 클래스

봉인 클래스는 기본 클래스로 사용할 수 없습니다. 봉인 클래스는 주로 파생을 방지하는 데 사용됩니다. 기본 클래스로 사용할 수 없기 때문에 일부 런타임 최적화는 봉인 클래스 멤버를 약간 빠르게 호출 할 수 있습니다.


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
그것에 대해 약간의 설명을 추가 할 수 있습니다.
abdul
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.