2012-09-25 129 views
2

我知道它已经在这里多次被回答,但我仍然没有得到实例化类的意义。我读了this,这确实有助于我的理解。静态与公共C#

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

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

+0

看看'Console'或'Math'类与'Exception'或'Button'类。 – SLaks

+0

如果您只有一个“控制台”,您可以将其设为静态。如果你有多个'Double',你不能让它们变成静态的。 –

+0

^作出这些答案......有些事情要在那里讨论。 –

回答

15

想象一个类似一组蓝图。实例化一个类就像获取蓝图并构建项目。当一名工程师设计一辆汽车时,他会想出设计。那将是班级。汽车设计完成后,计划交付到生产线上。每一辆从车上滚下来的汽车都是该设计的一个实例。

当汽车仍然只是一个设计,你不能做任何事情。如果没有汽车,你不能开门。一旦你有了汽车的实例,你可以操纵它。你可以打开门,启动发动机等。类似Double这样的课程。一旦你有实例,你可以操纵它。

静态类,如Console,是没有实例的类。它们更像是一种将有用的相关功能分组的方法。在Console的情况下,该功能用于与命令行进行交互。 Math用于分组数学相关的代码。 Configuration用于读取/操作配置文件。这些事情都不需要你为他们创造独特的东西来工作。

+1

这是一个非常简单但强大的'class'和'object'解释。 – Tarik

+0

这是一个很好的比喻。所以说如果我们有一个类'Person',其属性为'sex,weight,height',我们不得不实例化(创建)一个Person。但是,如果一个方法存在'BrushYourHair'这将是一个静态方法,因为人们在默认情况下将不得不发(不含秃顶的人,当然),你不必创建一个人是[执行行动。这是一个很好的比喻吗? – wootscootinboogie

+0

@wootscootinboogie - 接近。但是,你仍然需要知道哪个人正在刷他们的头发,这可以作为参数传递给静态方法。它看起来像'Hygiene.BrushHair(instanceOfSomePerson);' –

2

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

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

1

思考静态的一个(也许是过了)简化的例子如下:

如果你有类Dog;你可以实例化这个类来创建Dog Poodle = new Dog();和狗拉布拉多=新狗(); 如果Dog类具有变量hairColor,则对于Poodle和拉布拉多犬,hairColor可能不同。这两种不同的情况是分开的。

但是,如果你增加了一个静态变量来犬叫numberOfDogs,每一个新的狗被实例化(你可以做到这一点,例如构造函数)时递增的变量,那么变量也要算狗的总数,不管您检查哪只狗的情况都是相同的数字。 这是有用的(和危险的),这取决于你如何使用它。