是否可以在 .NET 中向强类型数据集添加接口?

Posted

技术标签:

【中文标题】是否可以在 .NET 中向强类型数据集添加接口?【英文标题】:Is it possible to add an interface to a strongly typed DataSet in .NET? 【发布时间】:2009-10-14 15:53:26 【问题描述】:

我有一堆强类型数据集,每个都有两个表。一个表对于每个 DataSet 是唯一的,但第二个表“MetaData”对于每个 DataSet 具有相同的架构。

在运行时,我确定要使用哪个 DataSet,并以适当的方式从数据库中填充数据表。

然后我想填充 MetaData 表。这将对每个 DataSet 以相同的方式完成,所以我想使用相同的代码。一种明显的方法是让每个 DataSet 实现一个接口来完成这项工作。

当我想为这些数据集声明这个接口(IMyInterface)时,问题就来了。

每个强类型数据集都包含大量文件。第一个也是关键的文件是 MyDataSet.Designer.cs 文件……这是一个自动生成的文件。开头附近有一行写着:

public partial class MyDataSet : global::System.Data.DataSet

我可以在此之后添加我的界面,但我完全有理由相信,当重新生成此文件时,它可能/将会被清除。

如果我告诉 VS 我想编辑 DataSet 的代码,它会为我创建一个名为 MyDataSet.cs 的新文件。但是里面的声明是这样的:

partial class MyDataSet

如果我尝试像这样添加一个接口:

partial class MyDataSet : IMyInterface

看起来我正在尝试添加一个子类。

处理这个问题的正确方法是什么?更改设计器文件,并确保 VS 不会重新生成它?将超类和接口声明都添加到另一个文件中?完全不同的东西?

【问题讨论】:

【参考方案1】:

哇。没关系。尽管最初在搜索时没有找到这个,但在重试这个查询后(在输入这个长问题后),我很快找到了答案。

显然它足够聪明,可以正确混合和匹配它们,这取决于它是要继承的类,还是要实现的接口。

MSDN 说:

例如,以下声明:

partial class Earth : Planet, IRotate  
partial class Earth : IRevolve  

等价于:

class Earth : Planet, IRotate, IRevolve  

【讨论】:

以上是关于是否可以在 .NET 中向强类型数据集添加接口?的主要内容,如果未能解决你的问题,请参考以下文章

在ArcGIS中向地图添加栅格数据有哪几步

在ArcGIS中向地图添加栅格数据有哪几步

我可以在运行时加载 .NET 程序集并实例化只知道名称的类型吗?

R中向具有大量数据集的数据框添加新列的有效方法

在 Spark Scala 中向数据集添加过滤条件

如何在 python 中向 Mnist 数据集添加 50% 的随机正常噪声