我有一个静态类,我想从另一个静态类继承,但是编译器禁止这样做。 “静态类必须从对象派生”
我想知道为什么并且有任何解决方法?
我有一个静态类,我想从另一个静态类继承,但是编译器禁止这样做。 “静态类必须从对象派生”
我想知道为什么并且有任何解决方法?
静态方式共享,它是不可继承的。你无法做到这一点。
您将无法通过继承完成此操作。尝试使用Composite Pattern。
在其中,你有几个实现和接口的对象,并且将被静态类“组成”,并将其作为其成员。好处是您可以将行为添加到实现您的接口的每个新类中,并且在运行时可以互换。
编辑:
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());
这是不可能从一个静态类继承,它们是密封和静态方法不能是虚拟的。
我认为你需要重新考虑你的设计,你可以考虑使用单例模式而不是静态类,那么你将能够继承没有问题。
或者只是使用一个静态成员加入两个类:
静态类甲 { 静态B B; }
你不能使用静态类作为成员的类型,你根本就不能实例化它。它是抽象的。 – 2010-11-19 02:46:48
@Ben。我应该更清楚。我打算建议的不是一个静态属性,而是一个非静态类型的实例属性,它实现了一个接口并包含共享行为的静态成员。然后,您可以从该类继承来添加行为。没有任何公开静态的东西。这不行吗? – Laramie 2010-11-22 19:22:21