首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C#中的抽象类与静态类

C#中的抽象类与静态类
EN

Stack Overflow用户
提问于 2011-04-14 15:32:44
回答 4查看 29.4K关注 0票数 13

可能重复:

What's the difference between an abstract class and a static one?

你好

我想知道C#中抽象类和静态类之间的所有区别

我什么时候使用什么和为什么?

抽象类是我们不能创建它的实例的类,是真的吗?

谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-04-14 15:43:48

--我想知道C#中抽象类和静态类之间的所有区别。

别问那样的问题。我可以花上几个小时列出数百个不同之处,而这些差异都与你无关。

抽象类和静态类在C#中最重要的区别是什么?

那才像话。

抽象类通常用于在类型层次结构中建模某物。例如,卡车是一种车辆,而飞机是一种车辆,所以你可能有一个基类车辆和派生类卡车和飞机。但是,“车辆”是抽象的,没有任何车辆只是车辆,而不是某种更具体的东西。你用抽象类来表示这个概念。

相反,静态类根本不打算建模任何东西。这只是存储一堆代码的一种方便的方式。实际上,它根本不应该是一个类;VB通过调用“模块”而不是“类”来做出更好的选择。尽管从技术上讲,静态类是从对象继承的,但是静态类在逻辑上完全不是在类型层次结构中。它们只是一个用来存放静态成员的水桶。

静态类通常用作扩展方法的容器。

我什么时候使用什么和为什么?

当您想要构建"an X是一种Y“形式的模型时,请使用抽象类。就像“汽车是一种交通工具”、“一个广场是一种形状”或“一本杂志是一种出版物”,"Y“是一个抽象的概念。不要用它来做“雇员是一种人”之类的事情--人应该是具体的。人不是一个抽象的概念,有些人只是人,但没有任何车辆不是别的东西。

当您想要创建扩展方法时,或者当您有一堆逻辑上符合逻辑但不与任何对象相关联的代码时,请使用静态类。例如,如果您有大量相关的数学例程,这是静态类的一个很好的候选。

是真的吗?抽象类是我们不能创建的类吗?

No.那是不是真。您可以创建抽象类的实例。为此,您可以创建一个更派生类的实例。

代码语言:javascript
运行
复制
Vehicle v = new Car();

显然,v指的是Vehicle实例,因此您可以创建一个抽象类的实例。您不能做的是创建一个抽象类的实例,这个实例也不是一个更派生的具体类的实例。

相反,您根本无法创建静态类的实例。

以下是一个你没有问的问题:

静态类和抽象类之间的实现关系是什么?

实际上,静态类在CLR中实际上并不作为一个概念存在。当您在类上说“静态”时,我们实际上所做的是生成一个没有公共构造函数的抽象密封类。因为它是抽象的,所以不能直接创建一个。因为它是密封的,所以您不能创建一个更派生的类并实例化它。

票数 66
EN

Stack Overflow用户

发布于 2011-04-14 15:35:29

确实,不可能创建abstractstatic类的实例,但这正是相似之处所在。

不能从static

  • Can继承
  • 不能继承abstract上的实例方法不能在abstract上有实例abstract类可以实现接口static类不能

从根本上说,他们正试图达到两个不同的目的。

  • 是一个abstract类,它形成一个蓝图/模式,然后在派生类中以不同的(希望是)透明的方式实现,
  • A static类只是一个可能相关的static方法

集合的容器。

票数 8
EN

Stack Overflow用户

发布于 2011-04-14 15:34:37

abstract类是一个必须继承才能使用的类,它只能被继承。

您可以创建继承它的类的实例。

static类是一个根本没有实例的类;这样的类只有static成员。

不能继承static类,也不能继承其他类。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5665691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档