StaticクラスとSealedクラスの違い


150
  1. 静的クラスで実装されるクラスはありますか?手段:

    static class ABC : Anyclass
  2. シールドクラスと静的クラスの両方で継承できるクラスはありますか?
    手段:

    static class ABC : AClass {}

    そして

    sealed class ABC : AClass {}

ある程度間違ってもいいですか。


static実際には何の関係もありませんsealed
ken2k 2013

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継承してインスタンス化できるが継承できないものと同じです。なぜそれが役立つのかは
わかり

static class Foo : object { }は有効ですが、本質的にはですstatic class Foo { }
themefield

39

簡単な言葉で

静的クラス

クラスは静的と宣言でき、静的メンバーのみが含まれることを示します。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();
    }
}

もう1つの封印された機能は、そのインスタンスからのみアクセスできます(それから継承することはできません)。

 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
あなたはそれについて少し説明を加えることができるかもしれません。
アブドゥル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.