---
title: "disabla en Metod i base från en ärvd klass"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/145352-disabla-en-metod-i-base-från-en-ärvd-klass"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "lucgo446"
published: "2006-04-11T07:17:44.000Z"
updated: "2006-04-11T15:12:31.000Z"
replies: 11
views: 772
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/145352-disabla-en-metod-i-base-från-en-ärvd-klass"
---

# disabla en Metod i base från en ärvd klass

## #1 — lucgo446, 2006-04-11T07:17Z

:e 

kan man disabla en Metod i base från en ärvd klass?

Exempel:

```
public class Person{

public Person(){}

public virtual Person GetKusin(){
return new Kusin();
}

}

//klass som ärver, men däri vill jag disabla GetKusin()

public class Kusin: Person{

public Kusin(){}

public override Person GetKusin(){
 // vill inte ha denna på Kusin
}

}
```

Alltså vill jag inte ha GetKusin på Kusin. Skulle vilja ändra "public" till private i Person-klass, typ...

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

## #2 — spango, 2006-04-11T07:26Z

Nix, går inte. Du kan överskugga metoden och kasta exceptions eller nåt sånt, men det är inte kosher objektorientering.

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

## #3 — P, 2006-04-11T07:35Z

Använd dig av ett interface som implementerar alla funktioner utan GetKusin och sen jobba mot det, kanske...

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

## #4 — PDahlen, 2006-04-11T07:36Z

Nu får väl någon rätta mig om jag har fel, men är det verkligen "kosher objektorientering" att låta Person klassen se Kusin, som ärver Person?
Metoden GetKusin() borde inte finnas i Person.
Person-klassen är föräldern och där ska det väl inte finnas några funktioner som "anropar" eller använder "barnen"?

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

## #5 — lucgo446, 2006-04-11T09:39Z

Stirra er inte blinda på innehållet utan på vad jag egentligen frågar... 

Går det att disabla en metod som ärvs? ta bort den.

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

## #6 — spango, 2006-04-11T09:50Z

Nej, det går inte. Rent objektorienteringsmässigt finns det ingen anledning att tillåta det, eftersom poängen med arv är att man vet att allt som finns i superklassen även finns i subklassen. Annars får man sjukt jobbiga exekveringsfel av kod i stil med den här:

```
public skrivKusin(Person p){
    print(p.getKusin());
}

...

Kusin k = new Kusin();
skrivKusin(k);
```

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

## #7 — lucgo446, 2006-04-11T10:28Z

jo, jag är med, man frångår då modellen för polymorfism. Men ändå... ;)

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

## #8 — PDahlen, 2006-04-11T11:15Z

Nu skjuter jag från höften men om du gör metoden private shadows GetKusin() i Kusin-klassen då, vad händer då?

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

## #9 — lucgo446, 2006-04-11T14:18Z

Var får du shadows ifrån? Finns inte i C#

Med private så blir den privat i Kusin men Person.GetKusin() finns kvar

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

## #10 — PDahlen, 2006-04-11T14:26Z

Sorry, shadows är VB, override borde det vara i C#
Men, jag hittade en länk åt dig där de gör precis vad du efterfrågar, <http://weblogs.asp.net/despos/archive/2004/03/10/86995.aspx>

Vad menar du med att Person.GetKusin() finns kvar?
Om du har en variabel av typen Person är det klart att den har GetPerson().

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

## #11 — lucgo446, 2006-04-11T14:38Z

Tack P, det var inte det... men det gör inge. Ville bara få bekräftat att det inte går... 

> Vad menar du med att Person.GetKusin() finns kvar?

Jo, Kusin.GetKusin() är privat medans Person.GetKusin() är ju fortfarande publik och "finns kvar"

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

## #12 — spango, 2006-04-11T15:12Z

Alltså, det faktum att metoden "finns kvar" efter arv är inte en bieffekt, utan själva definitionen av arv. Allt som finns i typ A måste finnas i typ B för att B ska vara en subtyp av A. Att bara delvis ärva är inget arv, med andra ord :)

I dynamiska OO-språk (Python, Javascript etc) är det toklätt att ta bort metoder och liknande. Fast man gör det liksom ändå inte.

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

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/145352-disabla-en-metod-i-base-från-en-ärvd-klass
