Karena multiple inheritance buruk (itu membuat sumber lebih rumit) C # tidak menyediakan pola seperti itu secara langsung. Tetapi terkadang akan sangat membantu jika memiliki kemampuan ini.
Sebagai contoh, saya dapat mengimplementasikan pola pewarisan berganda yang hilang menggunakan antarmuka dan tiga kelas seperti itu:
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(); }
}
Setiap kali saya menambahkan metode ke salah satu antarmuka saya perlu mengubah kelas FirstAndSecond juga.
Apakah ada cara untuk menyuntikkan beberapa kelas yang ada ke dalam satu kelas baru seperti itu mungkin di C ++?
Mungkin ada solusi menggunakan semacam pembuatan kode?
Atau mungkin terlihat seperti ini (sintaksis c # imajiner):
public class FirstAndSecond: IFirst from First, ISecond from Second
{ }
Sehingga tidak perlu memperbarui kelas FirstAndSecond ketika saya memodifikasi salah satu antarmuka.
EDIT
Mungkin akan lebih baik untuk mempertimbangkan contoh praktis:
Anda memiliki kelas yang sudah ada (mis. Klien TCP berbasis teks yang berbasis pada ITextTcpClient) yang sudah Anda gunakan di lokasi berbeda di dalam proyek Anda. Sekarang Anda merasa perlu membuat komponen kelas Anda agar mudah diakses oleh pengembang bentuk windows.
Sejauh yang saya tahu Anda saat ini memiliki dua cara untuk melakukan ini:
Tulis kelas baru yang diwarisi dari komponen dan mengimplementasikan antarmuka kelas TextTcpClient menggunakan instance dari kelas itu sendiri seperti yang ditunjukkan dengan FirstAndSecond.
Tulis kelas baru yang diwarisi dari TextTcpClient dan entah bagaimana mengimplementasikan IComponent (belum benar-benar mencoba ini).
Dalam kedua kasus, Anda perlu melakukan pekerjaan per metode dan bukan per kelas. Karena Anda tahu bahwa kita akan memerlukan semua metode TextTcpClient dan Component, itu akan menjadi solusi termudah untuk hanya menggabungkan keduanya menjadi satu kelas.
Untuk menghindari konflik ini dapat dilakukan oleh pembuatan kode di mana hasilnya dapat diubah setelahnya tetapi mengetik ini dengan tangan adalah rasa sakit yang murni di pantat.