当前位置: 首页 > 知识库问答 >
问题:

C# - 使用嵌套类来组织和访问大型类对象,其中子类可以访问父对象中的数据表 [重复]

宋建柏
2023-03-14

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

我有一个大约有130个属性的类对象,由我的winforms项目中的私有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中的DataTable中获取其值。

如果我在PropertyGroup_1的构造函数中使用 ref 关键字,这是否意味着PropertyGroup_1.table 将始终使用 ObjectToUseInProgram.table

如果将来我们实现对属性执行“设置”函数的功能,它们需要更新objectToSeinProgram的表,这样我们就避免了多个属性分组,每个属性分组都有自己的表修改。

共有1个答案

於德馨
2023-03-14

写这个的时候想不出正确的术语。答案很简单,解释如下:

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

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

 类似资料:
  • 问题内容: 我有一个扩展其超类的子类的对象。子类中有一个重写的方法,可以使用对象调用该方法。可以使用子类对象调用超类的函数吗? 考虑上面的代码。 它在这里打印 子类去 。相反,我必须打印 超类去 。 问题答案: 不,这是不可能的,如果您认为需要,请重新考虑您的设计。覆盖方法的全部要点是替换其功能。如果一个不同的类对该类的内部工作非常了解,那么您将完全取消封装。

  • 本文向大家介绍C#使用dynamic类型访问JObject对象,包括了C#使用dynamic类型访问JObject对象的使用技巧和注意事项,需要的朋友参考一下 dynamic是C#里面的动态类型,可在未知类型的情况访问对应的属性,非常灵活和方便。 使用Json.Net可以把一个Json字符串转换成一个JObject对象,如果有已知强类型,如果有已知对应的强类型,可以直接转成对应的类型。但如果没有,

  • 问题内容: 我最近拾起Java并遇到了问题。我有几个具有不同类的文件,但是我无法弄清楚如何访问文件中声明了其他类之外的其他类的对象。例如: 我不确定如何从其他文件和类本身有效访问其他类的这些对象?我知道我可以使对象静态化,然后通过它们所在的类将它们作为变量进行访问,但这似乎有点违反直觉?我来自面向对象较少的编程背景,因此我仍在尝试了解Java的编程风格。 问题答案: 您可能只想要这样的东西: 希望

  • 尝试使用所有独特的硬币进行选择过滤器,但无法正确到达其末尾。 在循环浏览数据时,我可以得到所有硬币的列表。 我还想使用Set方法和spread操作符来获得唯一的值,但我不知道如何组合所有这些。

  • 我是java初学者,我不理解这行代码是什么意思 平均值。为什么不能访问自己的方法。请详细解释如果类A正在实例化,那么为什么它的方法不可访问。

  • 我从foursquare收到了一个json形式的响应。我尝试访问对象的某些部分,但没有成功。如何访问对象的地址?这是我试过的代码。 以下是json响应的一个示例: 完整的回应可以在这里找到