Referenzen auf Instanzen

das mit dem auto ist nur ein beispiel,
im wirklichen projekt ist es anders, aber es gibt hier eine feste anzahl von "farben".
jedenfalls wird die rechenzeit dadurch weit verkürzt.
denoch besteht das problem mit dem löschen
 
Eigenschaften, Variablen und Attribute sind drei verschiedene Dinge.
Attribute sind dafür da um Kennzeichnungen bereitzustellen. So kannst du beispielsweise mit dem Serializable-Attribut festlegen, dass eine Klasse serialisierbar ist.
Eigenschaften definieren Zugriffe auf Variablen.
Mehr Infos findest du im Netz, z.B. hier: Eigenschaften (C#), Attribute (C#)
Wenn du 1000 Autos und davon 20 blaue Autos hast und diese 20 blauen Autos alle miteinander vergleichen möchtest, dann brauchst du aber keine 999000 Berechnungen sondern du musst nur über die 1000 Autos iterieren und alle blauen herausfiltern. Das sind 1000 Überprüfungen plus deine 380. Das Filtern kannst du zum Beispiel mit Linq machen:
C#:
private class Auto { }

private class BlauesAuto : Auto { }

static void Autotest
{
    // Liste mit 980 Autos und 20 blauen Autos füllen
    List<Auto> AlleAutos = new List<Auto>();
    for (int i = 0; i < 979; i++)
    {
        AlleAutos.Add(new Auto());
    }
    for (int i = 0; i < 19; i++)
    {
        AlleAutos.Add(new BlauesAuto());
    }
    // Alle blauen Autos herausfiltern:
    IEnumerable<Auto> AlleBlauenAutos = AlleAutos.Where(AktuellesAuto => AktuellesAuto is BlauesAuto);
    // Jetzt sind in "AlleBlauenAutos" alle blauen Autos enthalten und du kannst sie gegenseitig vergleichen
}
Wie du Events verwendest kannst du auch im Internet finden. Einfach mal :google: benutzen.
 
Zuletzt bearbeitet:
ja gut aber dann legst du dir ja temporer eine neue Liste mit allen blauen Autos an.
da ich die teillisten jedoch immer mal wieder brauche und ich von weit mehr als 1000 einträgen ausgehe, macht meiner Meinung eine Aufteilung und verschiedenen Listen mehr sinn.

Was ich an diesen Events noch nicht ganz verstehe.
Wenn Auto eine Zerstör Methode bekommt, wie soll Auto sich dann selbst aus der Liste Entfernen, ohne Zugriff auf die Klasse zu haben in der die Liste liegt?


ich wollte das topic mal anpassen, leider ging das nicht.

gruß und dank
 
Das Auto löst lediglich ein Event aus, dass es zerstört wurde. Die Klasse, in der die Liste liegt, reagiert auf das Event und entfernt den Sender des Events (das Auto) aus der Liste.
 
also die sache mit den Events gefällt mir,
ich verstehe die wie ein Interrupt bei einen µ-controller

habe dazu zwar mehre Bsp im Netz gefunden, aber so richtig, verstehe ich die Syntaks noch nicht.

also in unserem bsp
bekommt Auto folgendes
Code:
public delegate void EventHandler(int id);
public event EventHandler EventAutoZerstoeren;
und
Code:
public zerstoerAuto()
{
  if (EventAutoZerstoeren!= null)
  {
    EventAutoZerstoeren(this.id);
  }
}

und die klasse AutoFarbe mit der Liste bekommt
Code:
private void EventAutoZerstoeren(int id)
{
  AutoFarbListe.Remove(id);
}

und die Klasse AutoMarke mit der Liste bekommt auch
Code:
private void EventAutoZerstoeren(int id)
{
  AutoMarkenListe.Remove(id);
}

wenn ich jetzt von einer Instanz der Klasse Auto die Methode ZerstoerAuto aufrufe, werden automatisch die Events ausgeführt.

was ist aber das:
Code:
public delegate void EventHandler(int id);
public event EventHandler EventAutoZerstoeren;
also ich lege mir hier mein Event an, bzw sage ihm das es das irgendwo gibt und weise ihm anschließend einen Event Handler zu.
Woher weißt er jetzt aber wo die Events stehen, also in welchen Instanzen?
ich sage Ihm ja nicht das es Events sind, es könnten ja auch normale Methoden sein, was sie ja auch sind.

Code:
 if (EventAutoZerstoeren != null)
und was bedeutet wenn EventAutoZerstoeren == null ist. Also ich habe rausgelesen das passiert wenn kein EventHandler existiert, aber wann ist das der Fall?
Edit bei mir ist der immer null.

verstehe ich das richtig?

danke
 
Zuletzt bearbeitet:
http://openbook.galileocomputing.de/csharp/kap23.htm#Xxx130362
Du musst dein Ereignis noch abonnieren.

Und auch noch aus dem Buch
4.8 Zuweisungen und Ereignisse downtop

Zuweisungen (delegate) sind eine typensichere, objektorientierte Implementierung von Funktionszeigern und werden in vielen Situationen eingesetzt, in denen eine Komponente die Komponente aufrufen muss, die sie verwendet. Zuweisungen werden weitestgehend als Grundlage für Ereignisse eingesetzt, die das einfache Registrieren von Zuweisungen für ein Ereignis ermöglichen. Zuweisungen werden in Kapitel 22 ausführlich behandelt.

In den .NET-Frameworks finden Zuweisungen und Ereignisse breite Anwendung.
 
ja das delegate kenne ich noch aus c++ Zeiten, wobei es hier nie ausgeschrieben wurden ist.
Aber es dient dazu, den Compiler zu sagen das es die Funktion mit diesen übergabe und rückgabe Parameter irgendwo gibt.

Aber das mit dem Abonieren verstehe ich nicht ganz, hast du noch ein Bsp Code mit Komentaren?
Bzw kannst mir das nochmal genauer erklären?

gruß und dank
 

Neue Beiträge

Zurück