Avatar billede Mortimer12 Nybegynder
14. februar 2011 - 12:58 Der er 3 kommentarer og
1 løsning

C# Alle instances af bestemt objekt

Jeg har en klasse jeg selv har lavet og har i programmets runtime et varierende antal instances af denne klasse. Jeg er tilsyneladende en dumrian til at søge, ellers benytter jeg de forkerte begreber. Under alle omstændigheder kan jeg ikke søge mig frem til, hvordan jeg kan komme til at loope over alle instances af en given type/object (jeg ved ikke hvilket udtryk er det rigtige i C3, jeg er spritny.

Så f.eks.

class Car


car1 = new Car
car2 = new Car
car3 = new Car

Jeg vil så gerne kunne finde car1, car2 og car3 så jeg kan loope noget kode igennem på dem.

Hvordan gør jeg det?
Avatar billede aaberg Nybegynder
14. februar 2011 - 13:07 #1
Der findes ingen automatisk måde at gøre dette, du bliver nød til selv at programmere det.

En enkel metode, er at oprette en statisk liste af Car objekter, som du vedligeholder i din constructor.

Altså i din Car klasse skal du have følgende liste:

private static List<Car> _allCars = new List<Car>();
public static List<Car> AllCars
{
  get{return _allCars;}
}

i din constructor i Car klassen skriver du:
AllCars.Add(this);


for at loope igennem alle instanser af Car klassen, skriver du:
foreach (Car car in Car.AllCars)
{
  car.DoSomething();
}
Avatar billede aaberg Nybegynder
14. februar 2011 - 13:11 #2
Hvis du ønsker at rydde op efter dig selv, så Car instanser bliver fjernet fra listen når du ikke bruger dem længere, kan du lade klassen nedarve fra IDisposable, og fjerne instansen fra listen i Dispose metoden.

public class Car : IDisposable
{
  private static List<Car> _allCars = new List<Car>();
  public static List<Car> AllCars
  {
    get{return _allCars;}
  }

  public Car()
  {
    AllCars.Add(this);
  }

  public void Dispose()
  {
    AllCars.Remove(this);
  }
}

Så skal du bare sørge for at kalde Dispose metoden hver gang du er færdig med en Car instans.
Avatar billede Mortimer12 Nybegynder
14. februar 2011 - 13:13 #3
Det overrasker mig egentlig lidt, men jeg forstår så lidt bedre, hvorfor jeg ikke kunne finde noget. Jeg takker. Læg et svar, hvis du vil have point.
Avatar billede aaberg Nybegynder
14. februar 2011 - 14:06 #4
svar :)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester