Nej det går inte att inherita från två klasser. Varför? Jo för att då skulle man alltid få (minst) två imbigious referenser (eller vad det nu hette). Alltså om man kallar på ((objekt)myInheritedObject ).ToString() vilken av de två klassernas arv ner till objekt skall man titta på? I c++ kunde det inträffa en massa konstiga fel på detta sätt (om jag minns mina c++ lektioner korrekt.) så därför är det borttaget i .Net.
Jag har aldrig träffat på ett tillfälle då jag behöver ärva ifrån en Page och det låter väldigt konstigt att göra detta, i vilket fall behöver du det?
I vanlig kodning där man kan behöva mulitple inheritance har C# löst detta på samma sätt som Java genom Interfaces så ta en titt på dem om du behöver ärva ifrån flera klasser.
niko:
Det är sant, ska lägga det på minnet om jag behöver modifiera någon speciell del.
i vilket fall behöver du det?
Säg att jag bygger ett Assembly som ärver från system.enterpriseServices för att kunna använda funktionalitet från COM+. Det kan ex. vara logik för att automatiskt få en sträng skickad från COM+ vid instansiering.
Från denna klass vill jag nu ärva så att alla mina klasser får denna funktionalitet automatiskt. Då mitt Assembly redan ärver från "system.EnerpriseServices" kan jag ärva från några fler klasser.
Har försökt att komma på hur man kan lösa multiple inheritance med hjälp av Interfaces. Och slutligen lyckades jag hitta att det helt enkelt inte går.
C# only allows single inheritance. Interfaces, discussed later in this chapter, can be used when you need to inherit from multiple base types, but there's no multiple code inheritance.
Multipla arv tillåts inte, däremot arv i flera steg (som niko påpekat). Jag tycker det låter på ditt problem som om det går utmärkt att lösa med arv i flera steg. Dvs du skapar subklasser av den klass som har ärvt system.enterpriseServices. ??
Om jag har förståt det rätt så ska det enligt OOP "standard" inte vara möjligt att ärva från mer än 1 klass, det är därför det är så i Java, C# och VB.NET.
Problemet blir att om jag i en klass redan ärver från "System.EnterpriseServices", då kan jag ju i botten (ASP.NET) inte ärva från "System.Web.UI.Page".
Klass 1 ärver från System.EnterpriseServices
Klass 2 (asp.net) ärver från system.web.ui.page och kan då inte ärva från klass 1.
Varför ska den ärva från Klass 1? Varför ska codebehind ha något med COM komponenter? Är det inte bättre att använda affärslager som använder dina COM objekt?
Det är ingen COM-komponent, utan den körs bara från COM+ som en Assembly.
Anledningen är ju att i Klass 1 har jag implementerat logik som gör att COM+ automatiskt skickar en sträng (ex. databas sträng) vid instansiering av objektet, denna logik vill jag ha in i klass 2.
257 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2