2010-10-15 12 views
0

J'ai une classe abstraite qui implémente 3 interfaces.L'interface force la classe abstraite à implémenter ses fonctions

public abstract class ServiceBaseCore<Entity, EntityKey> : MarshalByRefObject, IComponentService, IEntityProvider<Entity, EntityKey> 
    where Entity : IEntityId<EntityKey>, new() 
    where EntityKey : IEntityKey, new() 
{ 
// Provided functionality/body to some methods of interface 
} 

Problème: Je reçois l'erreur que ma classe abstraite ne fournit pas la mise en œuvre (définition/corps) aux fonctions de l'interface, alors que ce que je lis est que « si une classe est abstraite qu'il n'y a pas besoin de fournir corps à toutes/toutes les fonctions de l'interface sa mise en œuvre ".

Remarque: le code a été généré par codeSmith même s'il présente une erreur.

s'il vous plaît dites-moi où je me trompe et ce qui me manque.

Merci

+0

il suffit de marquer vos méthodes d'interface abstraites dans votre classe abstraite. –

Répondre

7

créer quelques fonctions abstraites, et le compilateur arrêter de se plaindre:

public abstract void MyMethodDeclaredInTheInterface(); 

EDIT: Pour accélérer le processus, il suffit de déplacer le curseur sur le nom de l'interface dans votre classe abstraite, puis ctrl +. et sélectionnez "Implement interface YourInterface". Ensuite, un peu de recherche et de remplacement sur l'exception NotImplementedException devrait faire l'affaire.

+0

il y a environ 244 telles fonctions (me montrant l'erreur) plez me donner une idée pour que je puisse le faire rapidement –

+1

J'ai mis à jour ma réponse en conséquence –

+1

@Rajesh Rolen: Si vous avez 244 fonctions dans un seul type, peut-être devriez-vous envisager divisant cela en plusieurs types. Voir SRP http://en.wikipedia.org/wiki/Single_responsibility_principle –

1

Créer des méthodes abstraites pour l'interface. Sinon, la classe n'implémente pas forcément ces méthodes, même si les classes dérivées le peuvent (les versions dérivées ne seraient pas disponibles pour la base via vtables et ne pourraient donc pas remplir le contrat d'interface). Cela violerait l'idée derrière les interfaces. Note: il est tard et je suis fatigué, donc je peux me tromper sur la raison d'être. Mais l'ajout de méthodes abstraites pour les méthodes requises par les interfaces permettra de résoudre le problème.

0

Vous devriez être capable de faire un clic droit sur le nom de l'interface (près de MyClass : IMyInterface) pour voir le menu contextuel, puis choisissez 'Implémenter l'interface'. Visual Studio créera toutes les méthodes et propriétés requises pour satsify l'interface.

0

Vous pouvez essayer un IDE pour économiser beaucoup de temps. Je sais exactement que Eclipse peut le faire automatiquement.