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

C# C中的抽象类与静态类#,c#,abstract-class,static-classes,C#,Abstract Class,Static Classes,可能重复: 你好 我想知道C# 我什么时候用什么?为什么 抽象类是我们无法创建其实例的类吗? 谢谢抽象类是一个必须继承才能使用的类-它只能继承。 您可以创建继承它的类的实例 静态类是一个根本不能有实例的类;这样的类只有静态成员。 静态类不能继承,也不能继承其他类 True,抽象类不能实例化,而是形成其他类的基础。好处是您可以将功能放入抽象类中以帮助重用 静态类是在需要时由CLR实例化的类。任何时候都只能有一个实例。使用静态类非常有用,但必须注意线程和同时访问。确实不可能创建抽象类或静态类的实例

可能重复:

你好
我想知道C#
我什么时候用什么?为什么

抽象类是我们无法创建其实例的类吗?

谢谢

抽象类是一个必须继承才能使用的类-它只能继承。
您可以创建继承它的类的实例

静态类是一个根本不能有实例的类;这样的类只有
静态
成员。

静态
类不能继承,也不能继承其他类

True,抽象类不能实例化,而是形成其他类的基础。好处是您可以将功能放入抽象类中以帮助重用


静态类是在需要时由CLR实例化的类。任何时候都只能有一个实例。使用静态类非常有用,但必须注意线程和同时访问。

确实不可能创建
抽象类或
静态类的实例,但这就是相似性的终点

  • 可以从
    抽象继承
    不能从
    静态继承
  • 可以在
    抽象上有实例方法
    不能在
    静态上有实例
  • 抽象类可以实现
    静态类不能实现的接口
从根本上说,他们试图为两个不同的目的服务

  • 一个
    抽象类形成一个蓝图/模式,然后在派生类中以不同且(希望)透明的方式实现
  • static
    类只是一个容器,用于收集可能相关的
    static
    方法
我想知道C#中抽象类和静态类之间的所有区别

不要问这样的问题。我可以花上几个小时列出数百个差异,但没有一个与您相关

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

更像是这样

抽象类通常用于对类型层次结构中的某些内容进行建模。例如,卡车是一种交通工具,飞机是一种交通工具,因此您可能有一个基类车辆和派生类卡车和飞机。但“载体”是抽象的;没有一种交通工具仅仅是一种交通工具,而不是一种更具体的东西。您可以用一个抽象类来表示这个概念

相比之下,静态类根本不打算建模任何东西。这只是一种存储大量代码的方便方法。真的,它根本不应该是一门课;VB通过将这些东西称为“模块”而不是“类”,做出了更好的选择。虽然从技术上讲,静态类继承自对象,但从逻辑上讲,它们根本不在类型层次结构中。它们只是一个用来存放静态成员的桶

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

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

当您想要构建一个形式为“X是Y的一种”的模型时,请使用一个抽象类。例如“汽车是一种交通工具”、“正方形是一种形状”或“杂志是一种出版物”,其中“Y”是一个抽象概念。不要用它来形容“员工是一种人”——人应该是具体的。人不是一个抽象的概念;有些人只是人,但没有一辆车不是别的东西

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

抽象类是一个我们不能创建实例的类,这是真的吗

否。那是不是正确的。您可以创建抽象类的实例。您可以通过创建更派生类的实例来实现这一点

Vehicle v = new Car();
显然,v指的是Vehicle的一个实例,因此您可以创建一个抽象类的实例。你不能做的是创建一个抽象类的实例,而这个抽象类不是一个更派生的具体类的实例

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

这里有一个你没有问的问题:

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


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

这是一个非常广泛的问题,更需要引入OOP。找一本教程。家庭作业?面试问题?或者其他?这两件事直接比较起来似乎很奇怪。不。没有静态类的实例。你错了<代码>静态
类无法实例化。您在第二段中描述的是单例类,而不是静态类。虽然静态类确实可以在许多使用单例的地方使用,但它们不是一回事。但是,需要注意的是,可以实例化具有静态成员的类。CLR不是通过调用静态构造函数来创建静态类的单个实例吗?也许我的术语不正确?+1-埃里克应该是一名CS教授,@Eric Lippert你考虑过吗?@JonH:我考虑过在社区大学级别教授编程,可能会在冬天这样做