【发布时间】:2014-07-18 20:48:30
【问题描述】:
我无法理解在通常充当实例化蓝图的类中包含静态成员的总体原则是什么。我举个例子:
假设你有 Car 课程。
Class Car
{
public int yearBuilt;
public string make;
//etc
}
主要用于生产新车。所以你有一堆非静态成员,如预期和上面所示。现在,假设您按如下方式实例化 2 辆新车
Car.newCar1 = new Car();
Car.newCar2 = new Car();
现在,假设您想为今天制造的新车分配/跟踪供应商。假设您在任何时候只能有一个供应商,您认为此时制造的所有 newCar 都应该共享该值,因此您添加到 Car 类:
public static string supplier = "American AutoCompany X";
我现在无法通过实例访问它,即:newCar1.supplier,否则它会更改 newCar2 的值(在这种情况下是可以且更可取的),而是必须这样做才能完成相同的操作目标:
Car.supplier;
我不明白这一点。为什么不把你的静态方法/字段等放在一个完全不同的类中,比如:
class AllStaticStuff
{
}
并从那里访问它?从组织上讲,这甚至可能更可取,因为静态成员无论如何都与实例化无关。还是我错过了一些基本的东西,使这种组织方法比它的价值更麻烦?我想我不喜欢在非静态类中包含静态的想法的原因是我试图避免在任何一个类中不必要地增加成员,因为为了可读性,我觉得它更干净。
【问题讨论】:
-
在这种情况下,供应商应该属于
Car实例,而不是Car类本身。静态属性、字段和方法不应特定于实例,而应特定于整个类。 -
Anthony:我知道你的意思,但是,在不阅读所用术语的含义的情况下,让我们假设“供应商”确实是属于整个班级的东西。实际上,这就是我想要传达的情景。
-
@StevenNikolic 然后选择一个不同的例子。很明显,每辆车可以有不同的供应商,因此静态在这种情况下不合适。
-
mason:我不太明白你为什么这么说。静态描述了它是跨类成员的共享状态/值/进程这一事实,而不是它不会改变。或者,我又错过了什么?
标签: c# static encapsulation