是否可以在 .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 中向强类型数据集添加接口?的主要内容,如果未能解决你的问题,请参考以下文章