【问题标题】:C# how can I preserve data between class instances?C#如何在类实例之间保存数据?
【发布时间】:2017-11-29 18:59:28
【问题描述】:

抱歉标题含糊,但我真的不知道如何解释它。

鉴于 A、B 和 C 类。

如果 A 类包含一个列表,我如何保留该列表中的数据,以便 B 类和 C 类可以访问列表中的数据(即使 B 和 C 都新建了自己的 A 类实例)?

B 类和 C 类必须创建自己的实例(这是我无法控制的)。

我使用这个类作为我的对象数据源,假设我不能修改 Class C 的内容。

以下是一个示例类:

[DataObject]
public class Product
{
    public string Name {get; set;}
    public string Category {get; set;}
    public int ID {get; set;}

    public List<Product> ProductList =
        new List<Product>();

    [DataObjectMethod(DataObjectMethodType.Select)]
    public IEnumerable<Product> GenerateReport()
    {
        return ProductList;
    }

}

【问题讨论】:

  • 也许父母给了他们一个相同“数据”的副本。更多详细信息将有助于理解您在此处尝试执行的操作。在某些情况下,static 可能是正确的答案。
  • 可以从A继承B和C,也可以在B和C中定义A类型的属性
  • 使用类Static变量。

标签: c# instance-variables


【解决方案1】:

使用此处定义的静态:https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/static

然后您将能够访问类属性而不是实例属性。

【讨论】:

  • 是的,但我需要我的类是实例类型,以不断进行更改并将多个类的实例添加到列表中。另外,我不认为 List 可以使用静态类型?
  • 太棒了,我认为您将我的 List 设为静态可能是正确的。不过我现在有其他问题,我会在解决问题后回复您,
  • 嗯,成功了!我无法相信我花了多少时间试图解决这个问题。谢谢!我刚刚将我的 List 设为静态。
  • 顺便说一句...我想我正在学习你的复数课程“C# 中的面向对象编程基础”,我认为到目前为止我认为它非常棒!
【解决方案2】:

您有多种选择来实现这一点。正如在其他答案中所说,您可以使用 A 类中的静态属性/字段来访问列表。

第二个选项是使用依赖注入。创建 B 类和 C 类的构造函数,以便它们必须通过传入 A 的实例来初始化。 例如

class A
{
  public List<object> AList {get;set;}
}

class B
{
  private A localInstance;
  public B(A instance)
  {
    localInstance = instance;
  }

  public void SomeMethod()
  {
     // access to list from instance of A
     var a = localInstance.AList
  }
}

// Similar implementation for class c

【讨论】:

  • 你宁愿在这里对A类建立依赖关系。的确,您不是自己创建课程,而是仍然。
  • 你还应该考虑一个 Update() 方法,以防列表发生变化
  • @Deadzone 即使使用静态字段来访问 A 类数据,它仍然是依赖关系。它将直接挂在 B 类中,这不是一个好的设计。
猜你喜欢
  • 2017-12-02
  • 2013-05-21
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多