6
votes

Création d'une classe abstraite qui implémente plusieurs interfaces dans C #

J'aimerais créer une classe abstraite en C #, qui "hérite" de différentes interfaces, mais laisse la mise en œuvre concrète à la sous-classe. Toutefois, le compilateur se plaint, que la classe ne met pas en œuvre les méthodes spécifiées dans les interfaces. Je suis habitué à Java où cela a toujours travaillé, alors je ne sais pas comment il est censé travailler dans C #. Quoi qu'il en soit, c'est mon code: xxx


1 commentaires

Donc ajouter dans les méthodes nécessaires mais les étiquetez-les abstract


7 Réponses :


0
votes

Vous pouvez simplement déclarer les méthodes et les propriétés des interfaces attendez-vous comme abstrait dans votre classe abstraite. Cela oblige les sous-classes à effectuer la mise en œuvre mais ne violera pas les règles d'interfaces de C #.


0 commentaires

1
votes

Vous devrez ajouter des méthodes abstraites qui "implémentent" ces interfaces.

donc par exemple: xxx


0 commentaires

7
votes

C'est la bonne façon de le faire. xxx

je ne connais pas la définition de votre iPartimortsSatisAffiedNotification Interface donc mon échantillon ne peut fournir que définir les méthodes définies dans Idisposable do Pour iPartimortsSatisAffiedNotification de la même manière.


0 commentaires

0
votes

Classe abstraite en bases C'est une classe normale afin qu'il doit également mettre en œuvre ces méthodes.

Si vous souhaitez d'autres implémentations, placez les méthodes virtuelles (ou abstraites) dans la classe abstraite elle-même


0 commentaires

9
votes

Ajouter des méthodes abstraites: xxx


0 commentaires

0
votes

Comme indiqué par d'autres personnes, vous auriez besoin de marquer les méthodes comme résumé de votre classe de base, ce qui obligera les classes dérivées à mettre en œuvre. Vous pouvez exécuter ceci comme programme C # dans LINQPAD

void Main()
{   
DerivedClass dc = new DerivedClass("hello, world");
Console.Out.WriteLine(dc);  
string result = dc.Notify("greetings");
Console.Out.WriteLine(result);
}



public interface IPartImportsSatisfiedNotification
{
string Notify(string msg);
}



public abstract class MyClass  : IPartImportsSatisfiedNotification
{
   protected string name; 
   public MyClass(string name)
   {
   this.name = name; 
   }

   abstract public string Notify(string msg);

 }

 public class DerivedClass : MyClass
 {
public DerivedClass(string name) :base(name)
{

}

public override string Notify(string msg)
{
    return string.Format("Msg {0} from {1}", msg, this.name);
}

public override string ToString() 
{
    return this.name;
}
 }


0 commentaires

0
votes

Vous devez ajouter une méthode abstraite dans votre classe abstraite. xxx


0 commentaires