---
title: "[.NET 2.0] Arv"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/154851-net-2-0-arv"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "aleborg"
published: "2006-12-13T19:33:11.000Z"
updated: "2006-12-14T17:57:49.000Z"
replies: 7
views: 474
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/154851-net-2-0-arv"
---

# [.NET 2.0] Arv

## #1 — aleborg, 2006-12-13T19:33Z

Jag har tidigare inte varit i större behov av att använda mig av arv i mina klasser, men nu så är jag i stort behov av det men det funkar inte som jag vill :(

Jag har classA och classB, den sistnämnda ärver den första och har några extra properties.
I min kod har jag en färdigfylld instans av classA som jag nu behöver konvertera till en classB.

classA a = mySerializer.Deserialize(aCollXML) as classA;
classB b = a as classB;

men det funkar ju inte riktigt, hur löser man detta egentligen?

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

## #2 — Compusa, 2006-12-13T19:43Z

B är en A, men A är inte en B så det är inte så konstigt att det inte fungerar. Det du skulle kunna göra är en copy-constructor i klass B som tar emot ett objekt av typen A och sedan skapar ett B objekt av detta. Nu kan Java bäst och lite C# men du kanske förstår principen ändå?

```
public class B {
     public B(A object) {
         // Anropa A-konstruktorn (base i C#)
         // B-properties får du sätta till något default värde
     }
}

B bObject = new B(aObject);
```

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

## #3 — aleborg, 2006-12-13T19:52Z

Misstänkte att jag skulle behöva göra så :(

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

## #4 — Compusa, 2006-12-13T19:54Z

Fast det är inte dåligt att ha en copy-constructor, det bör man ha i sina klasser om behovet finns. Det du vill göra är en så kallad "downcasting" och jag antar att din kod kompilerar men du får ett runtime-error? Detta beror på att när du gör en downcasting så misslyckas det under runtime på grund av att A görs till en B men A har inte några utav egenskaperna som en B har. Använder du en copy-constructor kan du se till att dessa properties i alla fall initieras. Downcasting är riskabelt och något man bör undvika om det inte är vettigt.

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

## #5 — aleborg, 2006-12-13T20:01Z

Hur menar du förresten med "Anropa A-konstruktorn (base i C#)"

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

## #6 — Compusa, 2006-12-13T20:08Z

Att du gör ett anrop till konstruktorn i den klassen som B ärver av (dvs A), vet ej hur det ser ut i VB.net. Men så här skulle det kunna se ut i C#

```
public class A {
     private string property1;
     private string property2;

     public A(property1, propery2) {
         this.property1 = property2;
         this.property2 = property2;
     }
}

public class B {
     int propery3;
     public B(A object) {
         base(object.property1, object.property2); // Anropar parameterserad konstruktor i A

         // B-properties får du sätta till något default-värde, eftersom A ej har sådana
         property3 = 0;
     }
}

B bObject = new B(aObject);
```

Frågan jag ställer mig är varför du behöver göra om en A till en B? Om det är möjligt så skulle jag försöka göra en ABC (Abstract Base Class), som du sedan låter dina andra klasser ärva i från.

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

## #7 — Compusa, 2006-12-14T14:04Z

Fick du ordning på det?

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

## #8 — aleborg, 2006-12-14T17:57Z

Japp det fick jag, tack :)

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

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/154851-net-2-0-arv
