2010-11-19 20 views
0

可能性の重複継承:
How can a static class derive from an object?は、静的クラスに

を私は静的クラスを持っていると私は別の静的クラスから継承したいのですが、コンパイラがそうすることを禁止しています。 "静的クラスはオブジェクトから派生しなければなりません"

私は理由を知りたいのですが、回避策はありますか?

答えて

6

スタティックは共有を継承し、継承できません。あなたがこれを行う方法はありません。

-1

継承によってこれを達成することはできません。 Composite Patternをお試しください。

この中には、実装してインターフェイスを取っている静的クラスのメンバーで構成されているオブジェクトがいくつかあります。メリットは、インターフェイスを実装する新しいクラスにビヘイビアを追加し、実行時に互換性があるということです。

EDIT:

public class Foo 
    { 
     protected static class StaticClass 
     { 
      public static int Count { get; set; } 
     } 

     public virtual string GetBars() 
     { 
      return "I am Foo: " + StaticClass.Count++; 
     } 
    } 

    public class FooToo:Foo 
    { 
     public override string GetBars() 
     { 
      return "I am Foo Too: " + StaticClass.Count++; 
     } 
    } 

そして...

Foo foo = new Foo(); 
Foo fooToo = new FooToo(); 

Console.WriteLine(foo.GetBars()); 
Console.WriteLine(fooToo.GetBars()); 
+0

静的クラスをメンバーの型として使用することはできません。インスタンス化することはできません。それは抽象的です。 –

+0

@Ben。私はもっ​​とはっきりしていたはずです。私が提案しようとしていたのは、静的なプロパティではなく、インターフェイスを実装し、共有の動作のための静的なメンバーを含む非静的型のインスタンスプロパティでした。そのクラスから継承して、振る舞いを追加することができます。公的に静的なものはありません。それはうまくいかないでしょうか? – Laramie

0

彼らが密閉され、静的クラスから継承することはできません、と静的メソッドを仮想することはできません。

私はあなたのデザインを再考する必要があると思います。静的クラスの代わりにシングルトンパターンを使用することを検討しても問題はありません。

それとも静的メンバは、2つのクラスに参加使用:

静的クラス {静的B bを、 }