[C#] Komma åt childfunktioner i en lista av parents

Permalänk
Inaktiv

[C#] Komma åt childfunktioner i en lista av parents

Hejsan,

jag har tre olika klasser, låt oss kalla dom A, B och C.
A har några funktioner och B samt C extendar A och har några egna funktioner.

abstract class A { public int Multiply(x, y) { return x * y; } } class B extends A { public int Divide(x, y) { return x / y; } } class C extends A { public int Subtract(x, y) { return x - y; } }

Jag har en lista av A med både instanser av B och C i.

List<A> lista = new List<A>(); lista.Add(new B()); lista.Add(new C());

Vad jag nu vill göra är att komma åt funktionerna Divide och Subtract i B respektive C som ligger i listan. Hur ska jag gå till väga för att göra detta eller har jag tänkt fel från början?

Tack i förhand!
Havsmonstret

Permalänk
Medlem

Du kan alltid göra såhär:
int delat = ((B)lista[0]).Divide(5, 5);

Är du osäker om på vilken klass så går det alltid att dubbel kolla:

if (lista[0] is B)
{
var b = lista[0] as B;
Console.WriteLine(b.Divide(5,5));
}

Permalänk
Medlem

Vad är det du egentligen vill uppnå?
Men ja, att spara undan något som en A där man egentligen är ute efter B verkar vara ett poppis sätt att tänka fel.

Visa signatur

"Some poor, phoneless fool is probably sitting next to a waterfall somewhere, totally unaware of how angry and scared he's supposed to be." - Duncan Trussell

Permalänk
Medlem

Detta låter som en (skol)uppgift, väldigt lik en jag hade på arv i c++ en gång i tiden, men men.

Permalänk
Inaktiv

Nedå, det är ingen skoluppgift.
Har gett mig in i XNA och har kollat på exemplet dom har för Game States. Så tänkte skapa något liknande för att lära mig.

Jag har en klass som håller kolla på de olika staterna (tex. menyer m.m.) som spelet kan vara i.
Det finns en basklass, GameState som de andra ärver ifrån. Och de olika staterna behöver olika argument i en metod (måste tex. passera en variabel som sätts i menyn vidare till spelläget).

Snowy86's lösning fungerade och tar och kör på den så länge. Men känner inte att det är någon optimal lösning så ska ta att tänka om och försöka lösa det senare igen.

Tack för svaren

Permalänk
Medlem

Tanken med att använda state-pattern är att låta en context ha olika funktionalitet men låta den funktionalitet ligga i respektive state. Så att du i din sk context klass enbart kan köra currentState.Handle() .

Försök undvika att type-casta ditt state för det förlorar lite poängen med att använda state-pattern

class Context { private GameState currentState; public void Update(){ currentState.Handle(); } }

Visa signatur

In order to understand recursion, one must first understand recursion