【发布时间】:2018-12-28 15:47:39
【问题描述】:
肯定仍然是一名正在接受培训的程序员,但正试图为我的项目做点什么,并绕着圈子转。请在设置我的课程时寻求任何指导。我正在开发代码供其他人通过 .dll 程序集使用。
让我只描述一个简单的类(使用 Base 类),名为 Car,它有一些属性。这些就是我想要达到的要求:
1) 创建 Car 类实例的能力。用户实例化的 Car 对象的所有属性都应该是可变的。
2) 能够为他们提供 3 个预生成的 Car 对象供他们直接使用。怎么样:本田 CRV、丰田普锐斯、日产 Rogue
3) 预先生成的汽车(Honda CRV、Toyota Prius、Nissan Rogue)应该被锁定(只读?)。甚至 Base 类 Transport 中的属性也应该是只读的。
实现这一目标的最佳方法是什么?我是否使用静态属性?我是否使用 readonly 修饰符?我是否创建了一个名为 HondaCRV 的新类(例如)并使用 Car 作为基类?然后让东西在那里只读?我将什么设为公开和私有(或受保护)?还是我只是创建一个名为“Cars”的新类,它公开了我的 3 个预先生成的汽车(作为属性)而没有别的?
我只是不知道什么是最好的方法,哪种方法可以为我的组装消费者提供最佳体验。我尝试了一些事情并且接近了,但我永远无法让“只读”传播到基类。
请原谅我在示例代码中可能写的任何不良做法。我仍然是一名正在接受培训的 C# 程序员。
提前感谢您为我提供的任何帮助并尝试理解我的帖子。我很高兴(也很兴奋)学习并采纳您对我的任何想法。我也很乐意澄清任何事情。我尽力表达了我的要求。
阿马尔
enum Terrain
{
Land,
Water,
Air
}
class Transportation
{
private Terrain terrainType;
public Terrain TerrainType
{
get { return terrainType; }
set { terrainType = value; }
}
}
class Car:Transportation
{
private string mfg;
private string model;
public string Mfg
{
get { return mfg; }
set { mfg = value; }
}
public string Model
{
get { return model; }
set { model = value; }
}
public Car(string Manufacturer, string CarModel)
{
Mfg = Manufacturer;
Model = CarModel;
TerrainType = Terrain.Land;
}
}
【问题讨论】:
-
也许一件好事是拥有一个具有三个属性的静态 Cars 类......所以当我的 Assembly 的用户在 Cars 中键入时。那么这三个 Pregenerated 将只出现(HondaCRV、ToyotaPrius、NissanRogue)。我能够做到这一点,但是当我使用该类时,我能够更改所有我不想要的属性。
-
嗨,阿马尔,感谢您的提问。请考虑将其发布到 codereview.stackexchange.com/,因为它更适合那里,并且您更有可能得到您期望的答案。
-
这样做的一种方法是将每辆车设为只读。修改汽车意味着要创建具有所需属性的新车。
-
我同意,听起来像使用参数化构造函数让你的类不可变可以解决问题。然后,您可以定义一个预先创建的静态汽车池。
-
如果不出意外,汽车的品牌和型号应该不是可变的。如果这些属性发生变化,没有人会认为它和以前一样。