c# - 一个类的某些实例而不是其他实例的静态/共享变量

标签 c# .net vb.net

这可能只是我缺乏知识/糟糕的编程实践,但我很想知道是否: 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 语句,其中所有实例类共享相同的变量。

我的想法是:

  1. 继承类并在子类中创建共享变量
  2. 保持原样并在构造函数中声明 Type var
  3. 也许这可以通过某种方式通过接口(interface)来完成
  4. 最有可能 - 我只是不知道

谢谢,我希望我问的是有道理的!!!

最佳答案

最接近的事情是使用 abstract 完成的关键词。您将有一个抽象类 Computer,然后将被具体子类 DellComputerHpComputer 覆盖。一个粗略的 (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/

相关文章:

vb.net - 使用正则表达式 VB.Net 验证电子邮件

vb.net - 加入整数数组

c# - 高流量 web 服务的提示,c# asp.net sql2000

c# - 我怎么知道 RGB 颜色基本上是蓝色的?在 C# 中

c# - 如何在 C# 中截取 Winforms 控件/窗体的屏幕截图?

c# - 通用接口(interface)和扩展方法发现的多个实现

c# - 模拟 DirectoryEntry 的 "Properties"属性

c# - 在 StreamReader 中移动指针

c# - 对完全依赖于第三方应用程序的服务进行单元测试

.net - VB.NET 中常量的容器