Я знаю, что C# не предлагает множественное наследование. И я знаю, что есть обходные пути, например, this one.Множественное наследование в C# - снова
Но вот проблема, с которой я столкнулся сегодня, не может изобразить ни одного ELEGANT обходной путь. Я добавлю какой-нибудь абстрактный код-образец, чтобы вы быстрее его получили ...
(пусть это будет реальный код ASP.NET, потому что эти кодовые образцы класса A, класса B действительно запутывают) :
public class AdminPage : System.Web.UI.Page
{
protected override void OnInit(EventArgs e)
{
//if not an admin - get out
if(!CurrentUserIsAdmin()) Response.End();
base.OnInit (e);
}
}
public class JQueryPage : System.Web.UI.Page
{
protected override void OnInit(EventArgs e)
{
RegisterJQueryScript();
base.OnLoad (e);
}
}
//now here's what I REALLY miss in C#
public class AdminJQueryPage : AdminPage, JQueryPage;
Композиция элегантна и является лучшей альтернативой множественному наследованию во многих случаях. – Quibblesome
Дело в том, что один класс drived переопределяет метод A, другой производный класс переопределяет метод B. Таким образом, этот ответ не помогает. – Alex
Да, но вопрос в том, действительно ли это вам нужно? Или вы могли бы решить проблему лучше, разложив проблему на отдельные объекты? Часто на самом деле не требуются чрезмерные и глубокие иерархии наследования. Почему бы просто не решить проблему необходимости нового класса с совершенно новым классом «IAdminJQueryPage», составляющим совершенно новый (или, возможно, полученный) «IAdminPage» и «IJQueryPage»? – Joe