das folgende Problem Betrachten geworfen hatteErteilung einer Referenz auf eine Instanz, deren Konstruktor eine Ausnahme
Wenn ein Rahmen entwerfen, eine Schnittstelle ein Ereignis Aussetzens
präsentiertinterface I
{
event MyEventHandler MyEvent
}
Diese Schnittstelle wird schließlich von vielen implementiert werden verschiedene Drittanbieter und können von verschiedenen Kunden konsumiert werden.
Da jeder Anbieter neu kann das Ereignis args mit ungültigen Daten auf, die nur die Kontrolle Ich habe als ein Framework Autor auf der Veranstaltung args Ebene ist, so dachte ich an folgendem Schema:
class MyEventArgs
{
public int? MyProperty{get;}
MyEventArgs(int arg)
{
if(arg.IsInvalidArgument())//Let's pretend that there's such an extension method
throw new ArgumentException(...)
MyProperty = arg;
}
Dadurch wird sichergestellt, dass ein Client ungültige Werte nicht verwenden kann, die von einem bösartigen Codeabschnitt bereitgestellt werden, da der Konstruktor eine Ausnahme auslöst. Daher wird der Ganzzahl kein Wert zugewiesen, wodurch sie zu einer Nullreferenz wird.
Doch dies schafft auch Overhead in Client-Code, da jetzt der Client den HasValue zu prüfen hat und Zugriff dann Wert, so dass das eventargument weniger benutzerfreundlich .. Dies wird noch umständlich, wenn die Menge von Parametern pro Ereignisargument wächst.
ich technisch könnte das Fragezeichen, zu entfernen, die den Client des Nullable Unsinn befreien würde, da es meiner Meinung nach keine Möglichkeit, auf Gottes grüner Erde ist ein Verweis auf eine solche Instanz zu erhalten, aber das Problem ist, dass Dieses Szenario, obwohl es leicht zu testen ist, kann Randfälle haben, an die ich nie gedacht habe, daher meine Frage.
Gibt es eine Möglichkeit, einen Verweis auf eine Instanz zu erhalten, deren Konstruktor eine Ausnahme ausgelöst und an die Ereignislistener übergeben hat?
Es ist mir wirklich unklar, was Sie zu fragen versuchen. Zuallererst, über was "Overhead" sprichst du? Zweitens, welche "Referenz" möchten Sie genau erhalten? – CodeCaster
@CodeCaster Ich habe meine Frage bearbeitet. Danke, dass Sie mir die Unklarheit zur Kenntnis gebracht haben. Der Overhead besteht darin, die Nullable-API für jede Eigenschaft in der Ereignisargumentklasse zu verwenden. Der Verweis ist eine Referenz, deren Konstruktor eine Ausnahme ausgelöst hat. –