myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » GUI: Windows-Forms » Ist es sinnvoller oder performanter mit Events zu arbeiten?
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Ist es sinnvoller oder performanter mit Events zu arbeiten?

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Frokuss
myCSharp.de-Mitglied

Dabei seit: 26.08.2015
Beiträge: 156


Frokuss ist offline

Ist es sinnvoller oder performanter mit Events zu arbeiten?

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Leute,
habe da mal eine Frage, was sinnvoller wäre um mit Events zu arbeiten...
Ich habe mir 2 Controls - Liste ( : Panel) und ListenElement ( : Label) - erstellt. Eine Liste kann dabei beliebig viele ListenElemente haben, solange die ID des ListenElementes nur einmal vorkommt. Sprich ich habe mehrere Listen, bei denen ich mittels Drag&Drop die ListenElemente in eine andere Liste kopieren(!) kann.

Dabei ist es nun so, dass die Liste zu 100% von ListenElementen bedeckt ist. Das bedeutet, dass wenn ich etwas Droppen will, dass ganze auf dem ListenElement (Label) geschieht. Und das ist jetzt der Punkt an dem ich nicht weis, was sinnvoller wäre:

1.) Wie ich es aktuell habe:
Da das ListenElement nur Informationen über sich selber hat (z.B: die eigene ID), kann ich das Event zum Droppen nicht im ListenElement erstellen sondern muss dies in der Liste erstellen, die alle Informationen über seine Kinder hat.
Das bedeutet, wenn ein ListenElement in die Liste hinzugefügt wird, weisen ich direkt in der Liste dem ListenElement das DropEvent zu und habe damit alle Informationen aus der Liste zur Verfügung.

2.) Ich bin gestern Abend bei Suche auf einen kleinen Thread hier im Forum gestoßen:  Click- und Hover-Events von Label an Parent (Button) weiterleiten?!?
Dort wurde geschrieben, dass es die OnXyz-Methoden gibt. Ich weise jedem ListenElement direkt in seiner Klasse Events hinzu nach folgenden Format:

C#-Code:
        private void Evt_DragDrop(object sender, DragEventArgs evt) {
            if(this.Parent != null)
                    this.Parent.OnDragDrop(evt);
        }

und habe dazu dann in meiner Liste nur ein Event, was das ganze dann handelt.

Zusammengefasst:
- Entweder weise ich jedem ListenElement ein Event in der Liste hinzu, oder
- ich leite alle Events vom ListenElement an die Liste weiter (wie in dem Code-Beispiel)

Mir gehts ejtzt also eigentlich darum, was sinnvoller wäre, bzw. was performanter wäre... Hoffe ihr könnt mir da weiterhelfen :-)

Gruß Frokuss
06.11.2019 18:24 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
chilic
myCSharp.de-Poweruser/ Experte

Dabei seit: 12.02.2010
Beiträge: 2.020


chilic ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat:
- Entweder weise ich jedem ListenElement ein Event in der Liste hinzu, oder
- ich leite alle Events vom ListenElement an die Liste weiter (wie in dem Code-Beispiel)

Ist da ein Unterschied? Du machst doch beides.
08.11.2019 06:23 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Frokuss
myCSharp.de-Mitglied

Dabei seit: 26.08.2015
Beiträge: 156

Themenstarter Thema begonnen von Frokuss

Frokuss ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Naja, ich dachte da gäbe es wohl einen Unterscheid... Aber wenns quas keinen gibt, ist es ja gut :-)

Gruß Frokuss
10.11.2019 14:16 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Mihaeru
myCSharp.de-Mitglied

Dabei seit: 27.06.2011
Beiträge: 2


Mihaeru ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Du könntest alternativ auch eine Action verwenden. Diese weist du dann in der Liste dem ListenElement zu.

C#-Code:
public Action<DragEventArgs> DropListElement:

private void Evt_DragDrop(object sender, DragEventArgs evt) {
            DropListElement?.Invoke(evt);  // Hier wird dann die zugewiesene Funktion in der Liste aufgerufen
        }

Dann benötigst du in ListElement keine Information über die Liste (Parent).
12.11.2019 15:27 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.478
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von Mihaeru:
Du könntest alternativ auch eine Action verwenden.

Gilt im .NET Umfeld auf diese Art und Weise aber prinzipiell als negativen Weg (manche sagen auch Anti Pattern), weil es den Design Pattern von C# hier bricht.
Die Action hier bringt keinen Vorteil (unterm Strich sogar eher einen Nachteil), auch wenn es technisch funktioniert.

Bezogen auf die Frage, ob es mit Events sinnvoller ist: ja, Events sind in diesem Fall spgar sinvoller als Actions.
12.11.2019 15:29 Beiträge des Benutzers | zu Buddylist hinzufügen
Frokuss
myCSharp.de-Mitglied

Dabei seit: 26.08.2015
Beiträge: 156

Themenstarter Thema begonnen von Frokuss

Frokuss ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Also unabhängig davon, dass ich Action noch nice vorher gehört habe, macht es erstei einmal Sinn das ganze weiterhin mit Events zu lösen.
Aber spielt es eine Rolle, wenn ich alle Events vom Kind auf die Eltern umleite oder ob ich den Kindern direkt durch die Eltern das Event zuordne? Oder ist das im Grunde irrelevant, weil es kaum einen Performence-Unterscheid gäbe?

Gruß Frokuss
12.11.2019 15:56 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.478
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Software Design ist prinzipiell wichtiger als Deine Optimierungen, die in die Kategorie Micro-Optimierungen fallen.
Klar, man behält die Performance im Auge - Micro Optimierungen nimmt man aber dann in Angriff, wenn es notwendig ist.

Ich wette Du hast andere Stellen, die viel mehr ins Gewicht fallen als das hier.

Daher: behalte den .NET Event Pattern im Auge und sorg dafür, dass Du eine gute Struktur hast.
Das ist viel mehr Wert und löst/verhindert i.d.R. u.a. auch Konzeptfehler, die nachher Performance kosten.
12.11.2019 16:14 Beiträge des Benutzers | zu Buddylist hinzufügen
Mihaeru
myCSharp.de-Mitglied

Dabei seit: 27.06.2011
Beiträge: 2


Mihaeru ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

@Abt
Die Action sollte nicht anstelle des Events eingesetzt werden, sondern den Funktionsaufruf im Parent ersetzen, der im geposteten Code verwendet wird. Damit kann die doppelte Abhängigkeit aufgelöst werden. ListElement muss List nicht kennen Lediglich List kennt das ListElement.

Stattdessen kann man natürlich auch an der Stelle einen Event implementieren, den die Liste abonniert und das ListElement feuert.
12.11.2019 16:29 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Frokuss
myCSharp.de-Mitglied

Dabei seit: 26.08.2015
Beiträge: 156

Themenstarter Thema begonnen von Frokuss

Frokuss ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ja gut. Da hast du vermutlich recht. dachte nur, wenn ich super viele Events habe, könnte sich das irgendwann etwas deutlicher auswirken.

Gruß Frokuss
15.11.2019 17:55 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 3 Monate.
Der letzte Beitrag ist älter als 3 Monate.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 29.02.2020 11:21