2009-10-14 6 views
2

J'ai un tas de DataSet fortement typé qui ont chacun deux tables. Une table est unique pour chaque DataSet, mais la seconde, "MetaData", a le même schéma pour chaque DataSet.Est-il possible d'ajouter une interface à un DataSet fortement typé dans .NET?

Lors de l'exécution, je détermine le DataSet que je souhaite utiliser et remplit la table de données de manière appropriée à partir d'un DB. Je veux ensuite remplir le tableau MetaData. Cela se ferait de la même manière pour chaque DataSet, donc je voudrais utiliser le même code. Une façon évidente de le faire serait de faire en sorte que chacun des DataSets implémente une interface qui ferait le travail.

Le problème vient quand je veux déclarer cette interface (IMyInterface) pour ces DataSets.

Chaque DataSet fortement typé est livré dans une multitude de fichiers. Le premier, et critique, fichier est le fichier MyDataSet.Designer.cs ... c'est un fichier qui est généré automatiquement. Il y a une ligne près du début qui lit:

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

je pourrais ajouter mon interface après cela, mais je dois toutes les raisons de croire qu'il pourrait/serait effacé lorsque ce fichier est régénéré.

Si je dis à VS que je veux éditer le code pour le DataSet, il me crée un nouveau fichier appelé MyDataSet.cs. Mais la déclaration semble là comme ceci:

partial class MyDataSet 

Si j'essayé d'ajouter une interface à ce comme ceci:

partial class MyDataSet : IMyInterface 

il ressemblerait je tentais d'ajouter une sous-classe.

Quelle est la bonne façon de gérer cela? Changer le fichier du concepteur, et assurez-vous que VS ne le régénère jamais? Ajouter à la fois la superclasse et la déclaration de l'interface à l'autre fichier? Quelque chose d'autre entièrement?

Répondre

1

Wow. Ça ne fait rien. En dépit de ne pas trouver cela initialement lors de la recherche, en retendant cette requête (après avoir tapé cette longue question), j'ai trouvé la réponse rapidement.

Apparemment, il est assez intelligent pour pouvoir les associer correctement, selon qu'il s'agit d'une classe à hériter ou d'une interface à implémenter.

MSDN dit:

Par exemple, les déclarations suivantes:

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

sont équivalentes à:

class Earth : Planet, IRotate, IRevolve { } 
Questions connexes