如何创建应用通用数据源的能力 class

How to create the ability to apply a generic data source class

这可能是我知道该怎么做或过去已经做过的事情。出于某种原因,我对如何绕过它一无所知。这更多的是为了学习以及尝试在我的应用程序中实现一些东西。

我正在使用一组第三方控件。这些控件提供了许多很棒的功能。但是,我希望能够创建一个自定义对象来处理此控件的数据源的 logic/properties。

例如,我正在使用类似电子表格的对象。您向电子表格提供类似对象的一些数据,它会提取您的数据。这里的问题是您需要设置列、它们的数据类型和其他 formatting/events 以及一些将数据吐回给用户的逻辑。

List<CustomClassWithProperties> dataSource

自定义 class 具有一些将转换为列的属性。如 ProductName、Price、SalesDepartment、DatePurchased 等。这可以通过每次向电子表格提供列及其数据类型来完成。我希望能够创建一个助手 class,您只需提供一个列表、一个可见的列列表和一个可编辑的列列表,数据就会被填充而不会出现任何其他问题。

使用上面的列表,我会想象类似这样的东西:

DataHelperClass dtHlpr = new DataHelperClass(List<CustomClassWithProperties> data, List<string> visibleColumns, List<string> editableColumns)

这个数据助手class将数据输入列表作为电子表格数据源。然后它将获取 visibleColumns 列表并使用它来设置可见行,对于 editableColumns 也是如此。

我 运行 陷入精神障碍(漫长的一周)是我希望能够重用它的时候。假设我有一个具有完全不同属性的列表。我希望数据助手的构造函数能够处理我发送给它的任何列表。查看第三方控件的任何代码,它们的数据源似乎是对象类型。

有人能指出我正确的方向吗?我认为它与泛型和一些接口实现有关。老实说,我只是想不出从哪里开始。

您可以使 class 本身通用:

public class DataHelperClass<T>
{
    public DataHelperClass(List<T> data, ...) { ... }
}
DataHelperClass<CustomClassWithProperties> dtHlpr = new DataHelperClass<CustomClassWithProperties>(List<CustomClassWithProperties> data, List<string> visibleColumns, List<string> editableColumns)

然后您将针对 typeof(T) 进行反思。

如果可能的话,我也很想使用 IEnumerable<T> 而不是 List<T>,但这或多或少是一个偏好问题。

这类似于使用简单的 List<object>,只是它强制列表中的所有对象都继承自同一类型(很可能是 object),因此您可以获得更多类型检查比你否则会。

你提到了接口,我看不出有任何理由在这里包括它(至少从你告诉我们的内容来看),但你当然可以通过相同的语法创建一个通用接口。