c# - C#将一个大类拆分为多个类的最佳方法是什么,因此变量将在它们之间共享
问题描述
我正在尝试找到一种方法来使用一组共享方法和变量的类。
我想创建一个或多个可以处理数据的类,格式类似于 csv 文件。我创建了一个名为“Data”的大类,它应该包含主要变量和数据。
但是,根据我在网上学习的内容,最好一节课只处理程序的一个方面。
因此,Data 类将具有实际变量,如文本、列等,以及一个常用的构造函数。
internal class Data
{
private readonly int _id;
protected DateTime LastUpdateTime;
protected readonly List<Column> Columns = new List<Column>();
protected List<string> DataText = new List<string>();
protected string Headers;
public Data()
{
_id = Global.Last();
LastUpdateTime = DateTime.Now;
}
public Data(List<string> dataText, char separator, Boolean hasHeaders) : base()
{
DataText = dataText;
//DataManageColumns dataManageColumns = new DataManageColumns();
new DataManageColumns().CreateColumns();
new DataManageSeparator().Separator = separator;
if (hasHeaders == true)
{
new DataManageHeaders().SetHeaders();
new DataManageHeaders().ExcludeHeadersFromDataText();
}
}
public int GetId()
{
return _id;
}
}
但是,我确实想完成工作的各个方面,例如获取实际文本,或计算列数,或节省最后一次更改的时间,或者其他任何在它自己的类中。
例子:
class DataManageColumns : Data
{
public void CreateColumns()
{
for (int i = 0; i < DataText.Count; i++)
{
string[] splitLine = DataText[i].Split(Global.CurrentData().DataManageSeparator.Separator);
if (i == 0)
{
for (int j = 0; j < splitLine.Length; j++)
{
Columns.Add(new Column(j, splitLine[j]));
}
}
}
}
public List<Column> GetColumns()
{
return Columns;
}
public void SetColumns(List<Column> newColumns)
{
foreach (Column column in newColumns)
column.SetSerial(column.GetSerial());
}
}
它继承自 Data 类,因此可以使用其变量。
但!如何从基本 Data 类或任何其他类访问 DataManageColumns 方法? 我确实尝试将它添加到 Data 中:
internal DataManageColumns DataManageColumns = new DataManageColumns();
我最初的想法是使用类似的东西:specificData.dataManageColumns.DoWhatever();
虽然它没有显示错误,但它在运行时崩溃了Stack Overflow Exception。
我很快就明白了原因,并将其发布在这里以帮助其他人:新数据创建新的 ManageColumns,这需要一个新的数据,它再次创建另一个 ManageColumns 等等。
问题是,如何解决这个问题?
我尝试了什么:
我尝试使用嵌套类,嵌套类不能使用主类中的变量(除非有一种我不知道的方法)。
我考虑过创建一个部分类:但这仍然会在许多方面使用一个类,这违反了 SOLID 原则。
我尝试将子类设为静态,但使用静态使其无法继承或被继承。
我相信我不是第一个想要做这样的事情的人,而且它不应该那么难实施。但我找不到办法做到这一点。
你能帮忙吗?
谢谢你,叶甫根尼
UPD:如果可能的话,我非常喜欢从使用 Data 的子类中访问方法。
就像使用 Data 类的数据对象一样:
data.MethodFromSubClass();
解决方案
但!如何从基本 Data 类或任何其他类访问 DataManageColumns 方法?
你没有。更喜欢组合而不是继承(组合 v 继承),因为 DataManageColumns 类不是 Data 类的特定类型(就像三角形是一种形状一样)。前者利用了后者,而且Data
该类不需要知道任何关于DataManageColumns
或使用它的任何其他类的任何信息。
推荐阅读
- python-3.x - Python 3 Tkinter:属性错误
- function - 如何使由按钮 onclick 触发的功能仅触发一次?
- flutter - Flutter Listview不显示所有项目
- java - 如何加入 2 个一对多实体 jpql 查询
- c# - 从 Linux 容器获取网络 Windows 文件夹的目录
- elasticsearch - Vega-lite 数据转换为非嵌套对象
- javascript - React - 菜单下拉动态绝对位置
- php - Yii2:如何在不修改供应商文件夹的情况下更改 ExportMenu 配置?
- wordpress - WordPress GTranslate 禁用跟随重定向
- javascript - 用 `undefined` 填充稀疏数组