C# 如何保留 class 个实例之间的数据?
C# how can I preserve data between class instances?
很抱歉标题含糊不清,但我真的不知道该如何解释。
给定 Class A、B 和 C。
如果 Class A 包含一个列表,我如何保留该列表中的数据以便 Class B 和 C 可以访问列表中的数据(即使 B 和 C 都是新的上自己的实例 Class A)?
Classes B 和 C 必须创建自己的实例(这是我无法控制的)。
我正在使用这个 class 作为我的 object 数据源,假设我无法修改 Class C.
的内容
下面是一个例子class:
[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;
}
}
使用此处定义的静态:https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/static
然后您将能够访问 class 属性而不是实例属性。
您有多种选择来实现这一点。如其他答案所述,您可以在 Class A 中使用 Static property/field 来访问列表。
第二种选择是使用依赖注入。创建 class B 和 class 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
很抱歉标题含糊不清,但我真的不知道该如何解释。
给定 Class A、B 和 C。
如果 Class A 包含一个列表,我如何保留该列表中的数据以便 Class B 和 C 可以访问列表中的数据(即使 B 和 C 都是新的上自己的实例 Class A)?
Classes B 和 C 必须创建自己的实例(这是我无法控制的)。
我正在使用这个 class 作为我的 object 数据源,假设我无法修改 Class C.
的内容下面是一个例子class:
[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;
}
}
使用此处定义的静态:https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/static
然后您将能够访问 class 属性而不是实例属性。
您有多种选择来实现这一点。如其他答案所述,您可以在 Class A 中使用 Static property/field 来访问列表。
第二种选择是使用依赖注入。创建 class B 和 class 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