c# -使用嵌套类来组织和访问大型类对象,其中子类可以访问父对象中的DataTable



好吧,我不确定如何表达这个标题(因为我知道子类通常被称为继承类,这不是我在我的问题中所指的)(是的,我知道我在我的例子中继承了抽象类的方法。这里更多的是为了避免代码重复(与我的问题无关),所以我将尽可能给出一个最好的例子。

我有一个类对象,它有大约130个属性,由我的winforms项目中的私有DataTable对象支持。这些大多数属性将在DataTable中查找某些列(并可能在将来更新DataTable中的值)。其他属性使用该DataTable值并对数据库或字典执行查找。它们被设置为属性,因为它们将被绑定到多个不同的用户表单,并且其中许多将在整个代码库中进行评估,所以我希望能够轻松访问它们。

显然,130个属性是相当多的。所以我想出了一个命名方案来帮助组织它们,但我想知道如何进一步按类别组织。这样做的问题是,内部类现在必须初始化为对象(见下面的代码),并且我需要访问主对象的DataTable。

示例代码:

// All subclasses will have these members to allow retrieval of data
Public Abstract Class DataMethods
{
protected DataTable table;
protected int Return_Int(string SearchCol) => // get value from datatable
protected string Return_String(string SearchCol) => // get value from datatable
protected bool Return_Bool(string SearchCol) => // get value from datatable
}
public sealed class ObjectToUseInProgram :DataMethods
{
// this inherits the Datatable object and methods to get data from it
public ObjectToUseInProgram(string LookupID)
{         
table = {build the data table};
PG1 = new PropertyGroup_1(table);
}
public PropertyGroup_1 PG1 {get; private set;}
public sealed class PropertyGroup_1 :DataMethods
{
public PropertyGroup_1(DataTable tbl) { table = tbl; } //constructor
public Property_1 {get;} //retrieve value from ObjectToUseInProgram.table
}
}

这里的目标是能够使用ObjectToUseInProgram.PropertyGroup_1.Property_1检索属性,但Property_1从存储在ObjectToUseInProgram

中的数据表中获取其值。如果我在PropertyGroup_1的构造函数中使用ref关键字,这是否意味着PropertyGroup_1.table将始终使用ObjectToUseInProgram.table?

如果将来我们实现在属性上执行'Set'函数的能力,他们需要更新ObjectToUseInProgram的表,这样我们就避免了有多个属性组,每个属性组都有自己的表修改。

我写这篇文章的时候想不出正确的术语。答案很简单,在这里解释:

https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/nested-types

基本上,嵌套类需要一个构造函数,其中j传递父对象。这将创建对父对象的属性和方法的引用。从那里,我可以访问父对象数据表。每个属性将访问父属性。用this.DataReturn.

最新更新