gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:13:57 24 4
gpt4 key购买 nike

这可能只是我缺乏知识/糟糕的编程实践,但我很想知道是否: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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com