Hvem arver...

Tags:    c#

<< < 12 > >>
Jeg har subklasserne B + C som begge to arver fra klassen A

Hvordan kan jeg i klassen A validere om det er B eller C som har arvet fra A?



16 svar postet i denne tråd vises herunder
3 indlæg har modtaget i alt 5 karma
Sorter efter stemmer Sorter efter dato
Kan desværre ikke direkte besvare dit spørgsmål.

Nu har jeg ikke den store viden om OOP, men syntes det virker forkert at du forventer at din superclass ved hvem der har nedarvet den. Et abstrakt Hus skal ikke vide om den er et Rækkehus eller en Villa, det går imod hele ideén?

Korrigér mig endelig hvis min OOP viden er fejlagtigt.

Jeg tror faktisk ikke engang det er muligt. Men hvis det er skal du nok google efter noget runtime/dynamisk type checking noget.



Du kan vel internt checke hvilken instance klassen har.

Noget i stil med:
Fold kodeboks ind/udKode 


Men typisk bruger man method overrides som håndterer de ting du gerne vil. Enhver subklasse kan overskrive metoderne fra ancestor klassen.



Indlæg senest redigeret d. 09.02.2011 14:04 af Bruger #10216
Hej Brian,

Så forstod jeg hvad du søgte, men stadig ikke hvorfor.

Fold kodeboks ind/udKode 


Metoden over her, skriver hvem der har nedarvet klassen, hvis det er superklassen, skriver at det er super klassen.

Hvis du kører:
var b = new B();
og skriver b.GetMyType() retunere den teksten at B har nedarvet fra mig.

Er det hvad du søger?



*slettet*



Indlæg senest redigeret d. 09.02.2011 11:41 af Bruger #9814
I har helt ret i at det ikke burde være nødvendigt i klassisk OOP tankegang, men lige her har jeg brug kunne validere det.

Normalt ville jeg også override metoden i subklassen, men i det jeg skal lave skal jeg aktivt fra superklassen fortælle til brugeren, hvilken klasse der har arvet fra superklassen.

Og det er ikke et livsvigtigt program, men jeg vil prøve dit forslag Michael.



Nå, det funger ikke rigtigt som jeg gerne ville. Michael, dit forslag gav heller ikke rigtigt muligheden.

Jeg har lavet, så mine subklasser sætter en global variabel som superklassen kan læse. ikke kønt, men det virker og som skrevet var det heller ikke verdens vigtigste program :-)

Men tak for kommentarerne



private bool IsSubclass()
{
return this.GetType().GetGenericTypeDefinition().IsSubclassOf(typeof(A));
}

Håber det var hvad du søgte, metoden kan ihvertfald bruges til at identificerer om den nuværende klasse er en subklasse til en given klasse.



private bool IsSubclass()
{
return this.GetType().GetGenericTypeDefinition().IsSubclassOf(typeof(A));
}

Håber det var hvad du søgte, metoden kan ihvertfald bruges til at identificerer om den nuværende klasse er en subklasse til en given klasse.


Hej Lars. Ikke helt, det er faktisk omvendt. Jeg vil som superklasse vide om en sub-klasse har arvet fra mig (og hvilken).





Okey, så for lige at skære det ud i pap, vil du med en metode i superklassen finde ud af, om den givne sub-klasse har nedarvet fra den?

Jeg kan forstår ikke helt spørgsmålet.
Du skriver af B+C arver fra A og du gerne vil finde en metode til at finde ud af hvilken der arver fra A? .. Det vil jeg da mene de begge er?

Jeg tror ikke helt jeg forstår problemstillingen :)



Subklasserne B + C arver fra Superklassen A.

I superklassen A har jeg en metode som ikke er overrided i subklasserne og i denne metode vil jeg vide om B eller C har arvet superklassen.

Altså, instantierer jeg objektet C så skal A kunne skrive "Det er C som har arvet mig".



<< < 12 > >>
t