tutorials.de Buch-Aktion 05/2012
Seite 2 von 2 ErsteErste 12
ERLEDIGT
NEIN
ANTWORTEN
26
ZUGRIFFE
877
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #16
    FJK FJK ist offline Mitglied Gold
    Registriert seit
    May 2004
    Beiträge
    171
    also als beispiel habe ich eine Klasse Auto.
    auto besitzt die attribute Farbe und Marke.

    dann Habe ich die Klassen
    Alle Autos mit der Liste ListeAutos hier sind alle Autos die es gibt abgelegt.

    dann gibt es die Klasse AutoFarbe
    wobei die Instanz BlauesAuto von AutoFarbe eine Liste mit allen blauen Autos beinhaltet
    eine Instanz RotesAuto von AutoFarbe eine Liste mit allen roten Autos.

    und das selbe nochmal für Marken.

    wenn jetzt ein Auto Zerstört wird muss ich das ja überall löschen.
    da ich aber von AutoFarbe und Marke unendlich viele Instanzen haben kann wäre es schön wenn ich es einfach irgendwo lösche und in jeder liste verschwindet.
     

  2. #17
    Avatar von Shakie
    Shakie Shakie ist offline Mitglied Diamant
    Registriert seit
    May 2004
    Ort
    Europa
    Beiträge
    2.048
    Aha, was du meinst ist wahrscheinlich kein Attribut sondern eine Eigenschaft (Property), richtig?
    Du könntest das mit Hilfe von Events lösen.
    Du gibst der Auto-Klasse eine Methode "ZerstöreMich", welche dann ein Event "IchWurdeZerstört" auslöst. Alle Instanzen, die eine Referenz auf das Auto speichern, abonnieren das Event und im Eventhandler entfernst du das zerstörte Auto aus der Liste.
     
    hihi = -h²

  3. #18
    Avatar von Akeshihiro
    Akeshihiro Akeshihiro ist offline Mitglied Platin
    Registriert seit
    Aug 2008
    Ort
    Kirchlengern (NRW)
    Beiträge
    647
    Und warum brauchst du die Listen für die Marke, rote und blaue Farbe, wenn du die Autos bereits in einer Autoliste drin hast? Damit erstellst du nur unnötige "Verlinkungen" und hast im Endeffekt das Problem, das du jetzt hast, du musst nämlich mit allen Listen gleichzeitig arbeiten o.O Eine Liste, in der alle Fahrzeuge drin sind, reicht doch vollkommen aus oder nich?
     
    Man sagt, das Schwert eines Samurai sei seine Seele ...

    Mit den Beiträgen ist es wie mit Schwertern: Je besser die Rohstoffe sind und je öfter man diese bearbeitet, desto hochwertiger sind sie.

    Das Schmieden ist eine Kunst; Das Schreiben auch ;)

  4. #19
    FJK FJK ist offline Mitglied Gold
    Registriert seit
    May 2004
    Beiträge
    171
    Hallo,

    hmm wo genau ist der unterschied zwischen einen Attribut und einer Eigenschaft?
    ein Attribut ist ja eine Variable in einer Klasse und eine Eigenschaft?
    Also ein Button kann zum Beispiel die Eigenschaft Visible haben, aber das sah ich bisher auch nur als Variable an.

    An sowas wie diese Zerstör mich Methode dachte ich, aber die muss ja dann irgendwie auf die Listen zugreifen können oder?
    kannst du mir bitte noch etwas genauer erzählen wie das Funktioniert?

    der Vorteil an verschiedenen Listen ist die Verarbeitung.
    wenn du zum Beispiel alle blauen Autos auf irgend etwas Bestimmtes gegen seitig vergleichen willst, dann hast du bei insgesamt 1000 Autos und davon 20 blaue Autos
    20 * 19 = 380 vergleiche die du machen musst, wenn du weißt welche Autos blau ist, also in einer eigenen Liste liegen.
    oder 1000*999 = 999000 überprüfungen ob ein Auto blau ist und 380 eigendliche vergleiche auf den Wert.

    also 999380 berechnungen zu 380 berechnungen.
    klar?

    gruß und dank
     

  5. #20
    Avatar von Akeshihiro
    Akeshihiro Akeshihiro ist offline Mitglied Platin
    Registriert seit
    Aug 2008
    Ort
    Kirchlengern (NRW)
    Beiträge
    647
    Einleuchtend ist es zwar, aber was willst du machen, wenn weitere Farben dazukommen oder andere Eigenschaften der Fahrzeuge auch so "unter die Lupe genommen" werden, willst du dann für alles eine Liste anlegen? Die Veränderungen in deinem Code werden dann aber gewaltig werden.
     
    Man sagt, das Schwert eines Samurai sei seine Seele ...

    Mit den Beiträgen ist es wie mit Schwertern: Je besser die Rohstoffe sind und je öfter man diese bearbeitet, desto hochwertiger sind sie.

    Das Schmieden ist eine Kunst; Das Schreiben auch ;)

  6. #21
    FJK FJK ist offline Mitglied Gold
    Registriert seit
    May 2004
    Beiträge
    171
    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
     

  7. #22
    Avatar von Shakie
    Shakie Shakie ist offline Mitglied Diamant
    Registriert seit
    May 2004
    Ort
    Europa
    Beiträge
    2.048
    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:
    Code csharp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    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 benutzen.
    Geändert von Shakie (27.12.10 um 13:42 Uhr)
     
    hihi = -h²

  8. #23
    FJK FJK ist offline Mitglied Gold
    Registriert seit
    May 2004
    Beiträge
    171
    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
     

  9. #24
    Avatar von Shakie
    Shakie Shakie ist offline Mitglied Diamant
    Registriert seit
    May 2004
    Ort
    Europa
    Beiträge
    2.048
    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.
     
    hihi = -h²

  10. #25
    FJK FJK ist offline Mitglied Gold
    Registriert seit
    May 2004
    Beiträge
    171
    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 :
    1
    2
    
    public delegate void EventHandler(int id);
    public event EventHandler EventAutoZerstoeren;
    und
    Code :
    1
    2
    3
    4
    5
    6
    7
    
    public zerstoerAuto()
    {
      if (EventAutoZerstoeren!= null)
      {
        EventAutoZerstoeren(this.id);
      }
    }

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

    und die Klasse AutoMarke mit der Liste bekommt auch
    Code :
    1
    2
    3
    4
    
    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 :
    1
    2
    
    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 :
    1
    
     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
    Geändert von FJK (29.12.10 um 21:54 Uhr)
     

  11. #26
    Avatar von Spyke
    Spyke Spyke ist offline Capoeirista
    Registriert seit
    Oct 2002
    Beiträge
    931
    http://openbook.galileocomputing.de/....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.
     
    www.iv-interactive.de - Projektewebsite
    WikiParser - aktuelles Projekt

  12. #27
    FJK FJK ist offline Mitglied Gold
    Registriert seit
    May 2004
    Beiträge
    171
    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
     

Ähnliche Themen

  1. Referenzen zurückgeben
    Von hoctar im Forum PHP
    Antworten: 5
    Letzter Beitrag: 05.08.10, 12:51
  2. dll referenzen
    Von DerStauner im Forum .NET Windows Forms
    Antworten: 5
    Letzter Beitrag: 25.04.09, 09:10
  3. Referenzen
    Von Nob im Forum PHP
    Antworten: 3
    Letzter Beitrag: 24.04.07, 20:34
  4. Instanzen/Referenzen
    Von Mendragol im Forum Autodesk Maya (ehemals Alias)
    Antworten: 2
    Letzter Beitrag: 11.12.05, 21:58
  5. C Referenzen
    Von FactorX im Forum C/C++
    Antworten: 3
    Letzter Beitrag: 01.05.02, 16:10