VB.NET: Wie kann ich Ereignisse, die einen Wert zurückgeben, wie kann ich in C#?
In C#, ich kann dies tun:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Class1 c1 = new Class1();
c1.OnNeedInt += new Class1.NeedInt(c1_OnNeedInt);
int i = c1.GetInt();
}
int c1_OnNeedInt()
{
return 1;
}
}
public class Class1
{
public delegate int NeedInt();
public event NeedInt OnNeedInt;
public int GetInt()
{
return OnNeedInt == null ? 0 : OnNeedInt();
}
}
Beachte die Zeile int i = c1.GetInt();
. Ich kann nicht scheinen, um VB.NET 4.0 zu tun etwas ähnliches. Keine Hilfe?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist das nicht möglich vb.net Ereignisse ausgelöst werden muss, mit der RaiseEvent-Anweisung. Es gibt keinen Wert zurück. Es ist eine ziemlich fragwürdige Praxis in jedem Fall, ein event können keine oder mehrere Abonnenten. Nicht abzusehen, was die Rückkehr Wert sein könnte. Verwenden Sie einfach einen Delegaten statt:
In VB, brauchen Sie nicht zu überprüfen, um zu sehen, ob jemand an deinem event-handler. Sie können einfach anrufen RaiseEvent und wenn jemand hört, funktioniert es. Doch die Veranstaltung ist nicht gedacht, um einen Wert zurückzugeben. Sie könnten versuchen, kleben Sie es in ein Ereignis arg und pass herum, aber das wird chaotisch.
@HansPassant die Lösung ist nah, aber nicht ganz das, was Sie baten. Verändern seine Lösung ein wenig:
Alternativ, Sie könnten dies tun, ohne die benutzerdefinierten Delegaten mithilfe von Lambda:
Fand ich eine Antwort auf meine Frage. In der Basis-Klasse, die mein ASP.NET Benutzer-Steuerelemente Erben, habe ich dieses:
In meinem web-form-codebehind, ich wire es manuell auf diesen:
Die eigentliche Verbindung gehostet wird, die auf der webform-codebehind, aber ich habe mehrere Benutzer-Steuerelemente, die mit dieser Verbindung. Jedes mal, wenn eines der Bedienelemente muss die Verbindung, deren base-class-Anfragen und die host-Seite dient es. Möglich wird dies durch die
ByRef
Stichwort.Dies ist die nächste C# - äquivalent könnte ich zusammen stellen.
Ich denke seine sogar einfacher als die meisten Leute denken...
Dann in der Klasse, welches das Ereignis...
Es ist alles über die ByRef keywords in den Ereignis-Deklaration und die sub-Event-Handler.