如何创建应用通用数据源类的功能

时间:2015-03-13 20:46:39

标签: c# generics

这可能是我知道如何做或已经做过的事情。出于某种原因,我在如何包裹我的头脑方面留下了空白。这更适合学习以及尝试在我的应用中实现某些功能。

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

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

List<CustomClassWithProperties> dataSource

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

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

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

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

我遇到精神障碍(长周)的时候,我希望能够重复使用它。假设我有一个具有完全不同属性的List。我希望我的数据助手的构造函数能够处理我发送给它的任何List。查看我可以获得的第三方控件的任何代码,看起来他们的数据源是object类型。

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

1 个答案:

答案 0 :(得分:1)

你可以使这个类本身通用:

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),因此您可以获得更多类型 - 检查比否则。

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