静态类如何从对象派生?

Ali*_*Ali 41 c# oop

我试图通过静态类继承非静态类.

public class foo
{ }

public static class bar : foo
{ }
Run Code Online (Sandbox Code Playgroud)

我得到:

静态类不能从类型派生.静态类必须从对象派生.

我怎样才能从对象中派生出来?

代码在C#中.

mun*_*ent 52

导出静态类没有价值.使用继承的原因是:

  • 多态性
  • 代码重用

你不能用静态类获得的多态性,显然,因为没有实例上动态调度(换句话说,它不喜欢你可以传递一个酒吧,以期待一个Foo的功能,因为你不拥有一间酒吧) .

使用组合很容易解决代码重用:给Bar一个静态的Foo实例.

  • +1为OP的问题提供简单而合适的解决方案. (3认同)
  • 你说你想要一个*静态*`Bar`类继承自*非静态*`Foo`,以便它可以到达其受保护的成员?在那个设计中有很多腥味(在静态和非静态环境中,单个类很少有意义).但是,假设你有一个合理的理由,一个解决方案就是让`Bar`拥有一个私有的内部非静态类,它继承自`Foo`(称之为`FooWrapper`).它有公共方法,可以转发到它继承的受保护方法.然后`Bar`可以有一个`FooHelper`的实例,然后通过它来到`Foo`中的受保护成员. (2认同)

Jon*_*eet 23

从C#3.0规范,第10.1.1.3节:

静态类可能不包含 基类规范(第10.1.4节),并且不能显式指定基类或已实现接口的列表.静态类隐式继承自类型object.

换句话说,你不能这样做.


Gee*_*key 13

错误消息是虚假的.它不是说"一个"对象.它正在讨论称为"对象"的内置类型,它是.NET中所有内容的基础.

应该说"静态类不能指定基类型".

  • 不,它应该说"静态类不能指定基类型.静态类总是隐式地从System.Object派生." 请注意,您也无法从另一个静态类派生一个静态类. (4认同)

Chr*_*ney 8

摘自http://msdn.microsoft.com/en-us/library/79b3xss3(VS.80).aspx

静态类的主要特征是:

它们只包含静态成员.

它们无法实例化.

他们是密封的.

它们不能包含实例构造函数(C#编程指南).

因此,通过将非静态成员引入静态类,从非静态类继承违反了此列表中静态类的第一个特性.