繁体   English   中英

静态与公共C#

[英]Static vs. public C#

我知道在SO上已经多次回答了这个问题,但我仍然没有弄清楚实例化类的确切含义。 我读了这篇文章 ,这确实有助于我理解。

我知道像Console这样的静态类不能像Console c = new Console()这样的new表达式一起使用,因为该类中没有任何实例变量。 我也知道静态类提供'泛型'方法,通常用于Math函数。 我知道一旦你实例化了一个像Double d = new Double(); 您现在可以访问Double类中的任何方法。

我知道这些事实,但我觉得我真的不明白他们实际上是什么意思。 有人可以给出一个静态类绝对必要的例子,以及创建类的实例是绝对必要的吗?

想象一个类似一组蓝图的类。 实例化类就像获取蓝图并构建项目一样。 当工程师设计汽车时,他提出了设计。 那将是班级。 汽车设计完成后,计划将被移交到要建造的装配线上。 每辆下线的汽车都是该设计的一个实例。

当汽车还只是一个设计时,你无法用它做任何事情。 如果没有车,你就无法开门。 一旦拥有了汽车的实例,就可以操纵它。 你可以打开车门,启动发动机等。像Double 拥有实例后,您可以对其进行操作。

静态类(如Console )是没有实例的类。 它们更像是一种分组有用的相关功能的方法。 Console的情况下,该功能用于与命令行交互。 Math用于分组与数学相关的代码。 Configuration用于读取/操作配置文件。 这些都不需要您创建任何独特的工作。

必须在另一个类的应用程序中调用公共类,例如,这可能是一类数据访问(由businnes层调用)。

静态类不一定需要创建实例,例如跟踪或记录类。

考虑静态的一个(可能结束)简化示例如下:

如果你有班级狗; 你可以实例化这个类来创建Dog Poodle = new Dog(); 和狗拉布拉多=新狗(); 如果Dog类有一个变量hairColor,那么对于Poodle和Labrador,hairColor可能会有所不同。 两个不同的实例是分开的。

但是,如果您向Dog添加了一个名为numberOfDogs的静态变量,并且每次实例化一个新Dog时都会增加该变量(例如,您可以这样做构造函数),那么该变量将计算Dogs的总数,并且将是无论您检查哪个Dog实例,都是相同的数字。 根据您的使用方式,这很有用(也很危险)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM