2016-09-12 13 views
-2

この質問が理にかなっているのか、それとも素朴な質問なのか分かりませんが、満足のいく答えを見つけることができませんでした。静的クラスを継承した

複数の静的なクラス間でコードを共有したいと考えています。静的クラスのための抽象基底クラスの "等価"がありますか(つまり、別の静的クラスを継承することはできますか?)そうでない場合は、どうしてですか?抽象基本クラスの場合と同様に、複数の静的クラス間でコードを共有する別の方法はありますか?

また、静的クラスと「密封」クラスはどのように比較されますか?

+3

正確に_is_の質問はありますか? 'sealed'クラスを継承することはできません。これは、' sealed'キーワードが存在するすべての理由です。 –

+0

'sealed'クラスは、定義上、あなたが継承できないクラスです。あなたの質問は何ですか? – npinti

+0

"sealed修飾子は、他のクラスの継承を防ぎます" https://msdn.microsoft.com/en-gb/library/88c54tsw.aspx "抽象クラスの実装を提供するクラスによって抽象クラスを継承する必要がありますメソッドまたはプロパティ "と呼びます。 –

答えて

2

あなたは大丈夫です。リフレクションはstaticクラスはabstractsealedの両方であることが表示されます:

public static class MyStaticTest { 
    } 

    ... 

    // I'm abstract 
    Console.WriteLine(typeof(MyStaticTest).IsAbstract ? "I'm abstract" : ""); 

、あなたは(時エラーをコンパイル)インスタンスを作成することができない理由です:new MyStaticTest();

// I'm sealed 
Console.WriteLine(typeof(MyStaticTest).IsSealed ? "I'm sealed" : ""); 

ので、あなたは(時エラーをコンパイル)それを継承することはできません:public class MyClass: MyStaticTest {..}しかし、反射がどのstaticクラスは、同様sealedであることが表示されます。したがって、staticクラスで行うことは、staticメンバー(静的フィールド、プロパティ、メソッドなど)を宣言することです。

+0

'任意の抽象クラスも同様に封印されています.'抽象クラスではなく静的クラスを意味すると思います。 – Jonesopolis

+0

@Jonesopolis:タイプミスで申し訳ありません。「静的」(「abstact」ではない)クラスは「封印された」クラスです。 –

+0

大変申し訳ありませんが、とても役に立つ回答でした – Jonesopolis

0

abstractキーワードを使用すると、不完全で派生クラスで実装する必要があるクラスおよびクラスメンバーを作成できます。ただし、sealedキーワードを使用すると、以前に仮想としてマークされたクラスまたはクラスメンバーの継承を防止できます。

私はそれが完全だと思います。

+0

要約と密封キーワード主な役割を果たします。 – Bman

関連する問題