---
title: "Arv i c#?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/51071-arv-i-c"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "fredrik"
published: "2002-08-23T06:45:19.000Z"
updated: "2002-08-26T06:24:16.000Z"
replies: 10
views: 595
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/dotnet/51071-arv-i-c"
---

# Arv i c#?

## #1 — fredrik, 2002-08-23T06:45Z

Jag programmerar VB.NET och har sprungit på något av en begränsning.

VB.NET stödjer bara 1 arv per klass. Detta gör exempelvis att det aldrig går att ärva i en ASP.NET-klass då den redan ärver från "System.Web.UI.Page".

I C++ går det ju tex. att ärva från flera klasser.

Frågan är nu hur det fungerar i c#? Går det att ärva från flera klasser i en klass där?

Permalänk: https://www.webforum.nu/p/51071

## #2 — Grynet, 2002-08-23T07:29Z

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.

Permalänk: https://www.webforum.nu/p/761483

## #3 — niko, 2002-08-23T07:40Z

> **fredrik skrev:**
>
> Detta gör exempelvis att det aldrig går att ärva i en ASP.NET-klass då den redan ärver från "System.Web.UI.Page".

Jo, det går väl alldeles utmärkt i synnerhet om den klass du ärver
av redan ärver av System.Web.UI.Page.

Du kan alltså skapa en modifierad version av System.Web.UI.Page
med specialfunktionalitet och låta övriga sidor ärva av den.

Permalänk: https://www.webforum.nu/p/761490

## #4 — Grynet, 2002-08-23T07:54Z

Här är föresten en bra länk som diskuterar lite arv o annat

<http://msdn.microsoft.com/msdnmag/issues/01/11/instincts/print.asp>

Permalänk: https://www.webforum.nu/p/761497

## #5 — fredrik, 2002-08-23T07:55Z

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.

Permalänk: https://www.webforum.nu/p/761498

## #6 — Grynet, 2002-08-23T11:14Z

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.

 
\--Ur C# Programming frånv WROX

Permalänk: https://www.webforum.nu/p/761604

## #7 — ptype, 2002-08-23T11:17Z

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. ??

Permalänk: https://www.webforum.nu/p/761607

## #8 — Viktor, 2002-08-23T11:18Z

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.

/Viktor

Permalänk: https://www.webforum.nu/p/761610

## #9 — fredrik, 2002-08-23T13:19Z

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.

...eller?

Permalänk: https://www.webforum.nu/p/761719

## #10 — renholm, 2002-08-23T15:57Z

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?

Permalänk: https://www.webforum.nu/p/761831

## #11 — fredrik, 2002-08-26T06:24Z

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.

Permalänk: https://www.webforum.nu/p/762924

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/51071-arv-i-c
