| 

.NET C# Java Javascript Exception

0
Guten Tag

Eine Klasse braucht zu einer bestimmten Zeit eine Inforamtion von ausserhalb.
Dazu habe ich in VB.NET folgenden Event deklariert:
Friend Event GibMirInfo(ByRef info AS InfoTyp)
Wenn dann die Verarbeitung die Info braucht, wird der Event ausgelöst und gibt die benötigte Info zurück. Funktioniert, ist aber mit ByRef wohl nicht nach bester Ordnung.

Nun möcht ich die Funktion in C# "richtig" schreiben. Wie ist die Deklaration?

Hier noch die Absicht für das ganze:
Ein eigenes UserControl enthält eine Toolbar mit einigen Buttons. In den Eigenschaften soll aber nicht SaveButtonVisible sondern ToolBar.SaveButtonVisible. Die Appearance-Klasse ToolBar kennt die Toolbar nicht, kann sie aber über den Event abrufen.

Vielen Dank und Gruss
Andreas
News:
09.03.2011
Andreas Schädler 117 1 6
Was ist an ByRef auszusetzten wenn du den Typen verändern willst. Ansonsten nimmst du ByVal.
Floyd 09.03.2011
5 Antworten
4
Normalerweise löst man so etwas so:
public class MeineEventArgs : EventArgs {
public MeineEventArgs(InfoTyp info) {
InfoTyp = info;
}
public InfoTyp { get; }
}

// Hier das Event
public event EventHandler<MeineEventArgs> Foo;
// Hier der Event Auslöser
if (Foo != null) {
var eventArgs = new MeineEventArgs(info);
Foo(this, eventArgs);
if (info.Irgendwas == "bar") {
// tu was
}
}
// Später im Code nachfolgender EventHandler
meinObjekt.Foo += (sender, e) => { e.InfoTyp.Irgendwas = "bar" };

Oder hab ich deine Problematik falsch verstanden?
09.03.2011
Logdog82 856 2 8
2
Ich löse das immer so:

Erst mal eine eigene EventArgs-Klasse erstellen, die von
System.EventArgs
erbt:
public class MeineEventArgs : EventArgs 
{
private string _info = String.Empty;

public MeineEventArgs(string info)
{
_info = info;
}

public string Info
{
get { return _info; }
set { _info = value; }
}
}


Dann einen Delegate definieren:

public delegate void MeinEventEventHandler(object sender, MeineEventArgs e);


Anschließend das Event in der auslösenden Klasse einbauen:

public class EventTest
{
// Die Eventdeklaration
public event MeinEventEventHandler MeinEvent;

// Eine Methode, die das Event auslöst.
public void Foo()
{
OnMeinEvent("Irgendwer muss was machen!");
}

// Eine private Methode zum Auslösen des Events. Vorher prüfen, ob auch
// ein Empfänger an dem Event angemeldet ist.
private void OnMeinEvent(string info)
{
if(MeinEvent != null)
MeinEvent(this, new MeineEventArgs(info));
}
}


Und schlussendlich einen Empfänger für das Event:

class Program
{
static void Main(string[] args)
{
EventTest test = new EventTest();
test.MeinEvent += new MeinEventEventHandler(test_MeinEvent);
}

static void test_MeinEvent(object sender, MeineEventArgs e)
{
// Hier das Event abhandeln.
}
}


Ich hoffe, das hilft dir weiter.
10.03.2011
ThomasEParis 155 1 5
2
Schau dir generell mal ->
GuideToCSharp - Events
und
Event Usage Guideline - Microsoft
an

Weiterhin kann ich dir auch dieses Buch empfehlen Framework Design Guidelines
10.03.2011
Gentlehag 1,0k 3 8
1
Hallo zusammen

Vielen Dank für eure Antworten. Sie helfen mir sehr.

@Floyd:
Bin mal in einem Blog darüber gestolpert. Wenn ich richtig verstanden habe, wird das gemäss Clean Code vermieden. War aber nicht im Zusammenhang mit Events.

Gruss, Andreas
10.03.2011
Andreas Schädler 117 1 6
Wenn dir die Antworten helfen, wäre auch eine Bewertung nett ;-)
ThomasEParis 10.03.2011
Würde ich gerne, habe aber leider noch nicht verstanden wie das geht. Habe beim Stellen der Frage dummerweise nicht gesehen, dass ich nicht mit meinen Account eingelogt war. Weiter scheint mir noch die Berechtigung zum Bewerten zu fehlen. Werde die Bewertung sobald wie möglich nachholen.
Andreas Schädler 10.03.2011
Ich habe dir die Frage zugeordnet, Andreas.
Marvin Steppat 10.03.2011
Vielen Dank Marvin. Kann ich nur eine Bewerten? Kann ja aus allen etwas nehmen.
Andreas Schädler 10.03.2011
Du kannst (und solltest!) alle bewerten, aber die beste akzeptieren. Die beste Antwort erscheint dann ganz oben.
Marvin Steppat 10.03.2011
Jetzt hab ichs endlich geschnallt. Danke!
Andreas Schädler 10.03.2011
0
Hallo,

gibt es ein best-practise für events? ich meine dabei den Unterscheid zwischen den "klassischen" events (mit einem delegate) und den generic events.

ich benutze grundsätzlich die generic events, weil diese für mich übersichtlicher sind.

Gibt es sonst noch Vor- und Nachteile?
11.03.2011
david 393 1 6
Magst Du dafür nicht lieber eine eigene Frage aufmachen? Sonst wird es zu unübersichtlich hier. Außerdem könnte das Deine Chancen erhöhen, eine Antwort zu bekommen. Und vielleicht stehe ich gerade auf der Leitung - aber was sind für Dich "generic events"?
Matthias Hlawatsch 11.03.2011

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH