11. februar 2005 - 14:54Der er
8 kommentarer og 1 løsning
Abstract base class
Hvad er forskellen på at vælge at bruge "virtual/override" eller at i sin abstracte klasse implementere metode en som "public bool Load(int ID) {...}". Og så i implementation af denne metode i klassen der arver fra denne abstrakte klasse, så deklarer "new public bool Load(int ID) {.....}"?
Synes ikke selv jeg kan se nogen forskel på resultatet.
Udover dette, findes der en måde at "skjule" et member fra sin base klasse? Jeg har nogle properties jeg ikke synes skal være synlige fra folk der bruge min klasse som implementere en abstract klasse.
Mød en af Nordens fremmeste eksperter i adfærdsdesign – Morten Münster, der bl.a. har skrevet ” Jytte fra marketing er desværre gået for i dag” – på Computerworld Cloud & AI Festival.
virtual + override bruges når child skal erstatte noget parent funktionalitet
ingenting + new bruges når child skal bruge en metode med samme navn som en metode i parent (men som kun erstatter parent metoden i denne klasse og underklasser ikke i parentklassen selv)
Ellere kortere sagt. En virtuel funktion kan underklassen vælge at overskrive. En abstract funktion SKAL underklasse implementere. Så en abstract funktion giver en skarpere kontrakt.
Godt eksempel Arne, var svært at se nogen forskel i mine egne forsøg. Har jeg ret i at der ikke er nogen måde at skjule et member af base klassen? Jeg kunne godt tænke mig at gøre det member private eller noget i den stil, så andre der bruger min child klasse ikke kan se den. Men det bekæmper vel ideen med at arve..
men det virker ikke helt som man måske umiddelbart skulle tro
using System;
public class P { public void M() { Console.WriteLine("P M"); } }
public class C : P { private new void M() { Console.WriteLine("C M"); } }
class MainClass { public static void Main(string[] args) { C c = new C(); c.M(); } }
udskriver bare
P M
Man kan selvfølgelig lave en public new, men så får man jo forskel på:
C x = new C();
og
P x = new C();
og det er noget rod.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.