气宇轩昂的啄木鸟 · MSB3836 - MSBuild | ...· 3 月前 · |
谈吐大方的消炎药 · MySQL报错当出现Error Code: ...· 1 年前 · |
会开车的夕阳 · 车身控制器功能规范 - 知乎· 1 年前 · |
一身肌肉的伤疤 · 我做了一个WINDOWS定时任务,定时执行V ...· 1 年前 · |
可能重复:
What's the difference between an abstract class and a static one?
你好
我想知道C#中抽象类和静态类之间的所有区别
我什么时候使用什么和为什么?
抽象类是我们不能创建它的实例的类,是真的吗?
谢谢
发布于 2011-04-14 15:43:48
--我想知道C#中抽象类和静态类之间的所有区别。
别问那样的问题。我可以花上几个小时列出数百个不同之处,而这些差异都与你无关。
抽象类和静态类在C#中最重要的区别是什么?
那才像话。
抽象类通常用于在类型层次结构中建模某物。例如,卡车是一种车辆,而飞机是一种车辆,所以你可能有一个基类车辆和派生类卡车和飞机。但是,“车辆”是抽象的,没有任何车辆只是车辆,而不是某种更具体的东西。你用抽象类来表示这个概念。
相反,静态类根本不打算建模任何东西。这只是存储一堆代码的一种方便的方式。实际上,它根本不应该是一个类;VB通过调用“模块”而不是“类”来做出更好的选择。尽管从技术上讲,静态类是从对象继承的,但是静态类在逻辑上完全不是在类型层次结构中。它们只是一个用来存放静态成员的水桶。
静态类通常用作扩展方法的容器。
我什么时候使用什么和为什么?
当您想要构建"an X是一种Y“形式的模型时,请使用抽象类。就像“汽车是一种交通工具”、“一个广场是一种形状”或“一本杂志是一种出版物”,"Y“是一个抽象的概念。不要用它来做“雇员是一种人”之类的事情--人应该是具体的。人不是一个抽象的概念,有些人只是人,但没有任何车辆不是别的东西。
当您想要创建扩展方法时,或者当您有一堆逻辑上符合逻辑但不与任何对象相关联的代码时,请使用静态类。例如,如果您有大量相关的数学例程,这是静态类的一个很好的候选。
是真的吗?抽象类是我们不能创建的类吗?
No. 那是 不是 真。您可以创建抽象类的实例。为此,您可以创建一个更派生类的实例。
Vehicle v = new Car();
显然,v指的是Vehicle实例,因此您可以创建一个抽象类的实例。您不能做的是创建一个抽象类的实例,这个实例也不是一个更派生的具体类的实例。
相反,您根本无法创建静态类的实例。
以下是一个你没有问的问题:
静态类和抽象类之间的实现关系是什么?
实际上,静态类在CLR中实际上并不作为一个概念存在。当您在类上说“静态”时,我们实际上所做的是生成一个没有公共构造函数的抽象密封类。因为它是抽象的,所以不能直接创建一个。因为它是密封的,所以您不能创建一个更派生的类并实例化它。
发布于 2011-04-14 15:35:29
确实,不可能创建
abstract
或
static
类的实例,但这正是相似之处所在。
不能从
static
abstract
上的实例方法不能在
abstract
上有实例
abstract
类可以实现接口
static
类不能
从根本上说,他们正试图达到两个不同的目的。
abstract
类,它形成一个蓝图/模式,然后在派生类中以不同的(希望是)透明的方式实现,
static
类只是一个可能相关的
static
方法
集合的容器。
发布于 2011-04-14 15:34:37
abstract
类是一个必须继承才能使用的类,它只能被继承。
您可以创建继承它的类的实例。
static
类是一个根本没有实例的类;这样的类只有
static
成员。
不能继承
static
类,也不能继承其他类。
https://stackoverflow.com/questions/5665691
复制相似问题
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2023 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号: 粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
谈吐大方的消炎药 · MySQL报错当出现Error Code: 1046. No database selected Select the default DB to be used by double-clicking 1 年前 |
会开车的夕阳 · 车身控制器功能规范 - 知乎 1 年前 |