当前位置:  开发笔记 > 编程语言 > 正文

静态类如何从对象派生?

如何解决《静态类如何从对象派生?》经验,为你挑选了4个好方法。

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

public class foo
{ }

public static class bar : foo
{ }

我得到:

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

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

代码在C#中.



1> munificent..:

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

多态性

代码重用

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

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


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

2> Jon Skeet..:

从C#3.0规范,第10.1.1.3节:

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

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



3> GeekyMonkey..:

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

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


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

4> Christopher ..:

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

静态类的主要特征是:

它们只包含静态成员.

它们无法实例化.

他们是密封的.

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

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

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有