2009-04-12 19 views
2

Ist es irgendwie möglich, eine Funktion an eine andere Funktion zu senden, damit sie ausgeführt werden kann? Zum Beispiel ... Ich möchte ein Attribut für ein Feld haben, in dem ich eine Methode angeben kann, die an eine andere Methode gesendet wird, bei der die übergebene Methode ausgeführt wird.Eine Methode an eine andere Methode übergeben

Nicht sicher, ob das Sinn macht, aber hier ist ein kleines Beispiel.

[ValidateIf(x=>x.test())] 
public string test { get; set; } 

Update: Grundsätzlich möchte ich DataAnnotations für die Validierung verwenden, aber manchmal abhängig von den Systemeinstellungen ein Feld nicht obligatorisch sein kann ... Haben Sie auf die Richtung Vorschläge haben sollte ich den Kopf?

Antwort

3

Leider können Sie Delegaten nicht als Eigenschaften für Attribute verwenden. Sie müßten den Namen der Methode angeben und dann den Delegaten mit Reflektion zur Ausführungszeit erstellen - was offensichtlich nicht ideal ist, um Tippfehler zur Kompilierzeit zu finden.

Es könnte möglich sein, in IL (a MethodInfo mit einem Äquivalent zu typeof Angabe), aber C# aussetzen keine Möglichkeit dies zu tun :(Vielleicht eines Tages werden wir die infoof Operator bekommen ... ganz wie Ich würde mich nicht sicher sein. (Es wäre gut, die Informationen zum Delegattyp im Attribut zu behalten.)

+0

bassically Ich möchte DataAnnotations für die Validierung verwenden, aber manchmal abhängig von den Systemeinstellungen kann ein Feld nicht obligatorisch sein ... Haben Sie auf die Richtung Vorschläge habe ich den Kopf sollte? – Schotime

0

Ich weiß nicht, ob dies Ihr spezifisches Ziel erfüllt, aber im Allgemeinen, wenn Sie es sind Wenn Sie nach Datenanmerkungen für Ihre Sprache suchen, empfehle ich Ihnen, SpeC# zu betrachten. Dies ist eine Erweiterung der C# -Sprache, mit der Sie Ihrem Programm Datenkontrakte hinzufügen können, und scheint das gewünschte Ziel zu erreichen.

http://research.microsoft.com/en-us/projects/specsharp/

Verwandte Themen