Depuis l'héritage multiple est mauvais (il est la source de plus compliqué) C# ne pas fournir un tel motif directement. Mais parfois, il serait utile d'avoir cette capacité.
Par exemple, je suis capable de mettre en œuvre le manque de l'héritage multiple motif à l'aide d'interfaces et de trois classes comme ça:
public interface IFirst { void FirstMethod(); }
public interface ISecond { void SecondMethod(); }
public class First:IFirst
{
public void FirstMethod() { Console.WriteLine("First"); }
}
public class Second:ISecond
{
public void SecondMethod() { Console.WriteLine("Second"); }
}
public class FirstAndSecond: IFirst, ISecond
{
First first = new First();
Second second = new Second();
public void FirstMethod() { first.FirstMethod(); }
public void SecondMethod() { second.SecondMethod(); }
}
Chaque fois que je ajouter une méthode à l'une des interfaces j'ai besoin de changer la classe FirstAndSecond .
Est-il possible d'injecter plusieurs classes existantes dans une nouvelle classe, comme il est possible en C++?
Peut-être il ya une solution à l'aide d'une sorte de génération de code?
Ou il peut ressembler à ceci (imaginaire syntaxe c#):
public class FirstAndSecond: IFirst from First, ISecond from Second
{ }
De sorte qu'il n'y a pas besoin de mettre à jour la classe FirstAndSecond quand je modifie une de ces interfaces.
MODIFIER
Il serait peut-être préférable de considérer un exemple pratique:
Vous avez une classe existante (par exemple, un texte basé sur TCP client sur la base d'ITextTcpClient) que vous utilisez déjà à différents endroits à l'intérieur de votre projet. Maintenant, vous vous sentez le besoin de créer un composant de votre classe afin d'être facilement accessible pour les développeurs windows forms.
Comme je sais que vous avez actuellement deux façons de le faire:
Écrire une nouvelle classe qui est héritée de composants et implémente l'interface de la TextTcpClient classe à l'aide d'une instance de la classe elle-même comme le montre avec FirstAndSecond.
Écrire une nouvelle classe qui hérite de TextTcpClient et en quelque sorte, met en œuvre IComponent (n'ai même pas essayé encore).
Dans les deux cas, vous devez faire le travail par méthode et non par classe. Puisque vous savez que nous aurons besoin de toutes les méthodes de TextTcpClient et Composant ce serait la solution la plus simple à combinez ces deux dans une classe.
Pour éviter les conflits, ce qui peut être fait par la génération de code où le résultat pourrait être modifiée par la suite, mais de taper à la main est une pure douleur dans le cul.