这可能只是我缺乏知识/糟糕的编程实践,但我很想知道是否: a) 这已经存在 b) 如果它不存在,如果这样做是不好的编程习惯
但这是我的问题:
假设我有一个类,我们称它为“计算机”,它包含公司中所有计算机的数据。现在,碰巧这家公司拥有数千台戴尔电脑和数千台惠普电脑,除此之外别无他物。 (再次请坚持我在这里,这只是一个例子来说明我的观点)
现在,我可以按如下方式定义我的类:
Public Class Computer
Dim Type as string
Dim SerialNumber as string
Dim User as String
...
End Class
现在,在我的代码中我创建了两个列表:
Dim DellComps as new list(of computer)
Dim HPComps as new list(of computer)
显然,对于 DellComps
, 他们都会有 .Type = "Dell"
和 HPComps
, 都会有 .Type = "HP"
现在,我知道我可以很容易地在构造函数中设置这个变量,但我想知道是否有更聪明的方法来在类中声明变量——类似于 VB Shared/C# Static 语句,其中所有实例类共享相同的变量。
我的想法是:
- 继承类并在子类中创建共享变量
- 保持原样并在构造函数中声明 Type var
- 也许这可以通过某种方式通过接口(interface)来完成
- 最有可能 - 我只是不知道
谢谢,我希望我问的是有道理的!!!
最佳答案
最接近的事情是使用 abstract 完成的关键词。您将有一个抽象类 Computer
,然后将被具体子类 DellComputer
和 HpComputer
覆盖。一个粗略的 (C#) 示例是:
public abstract class Computer
{
public string Type { get; protected set; }
}
public class DellComputer : Computer
{
public DellComputer()
{
this.Type = "Dell"
}
}
您通常不想在大量实例之间共享单个变量,因为这会破坏封装,而且更现实地说,在尝试对代码进行单元测试时可能会成为一个大问题。因此,您所谈论的纯粹形式并不是一个非常好的主意,但实际用例非常普遍,并且绝对受到支持。
编辑:作为下面评论的一部分,这里有一种不同的方法,它使用非常密切相关的 virtual关键词!
public abstract class Computer
{
public virtual string Type { get; }
}
public class DellComputer : Computer
{
public override string Type
{
get {
return "Dell";
}
}
}
关于c# - 一个类的某些实例而不是其他实例的静态/共享变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13092736/