Was Sie beschreiben, heißt delegate
. Sie können in den Deklarationen der Variablen/field/property/eventhandler verwendet werden. C# enthält einige nützliche Generics, mit denen Sie die erwartete Funktion beschreiben können. Einige Beispiele:
Action // A void function
Action<T> // A void function that accepts a parameter of type T
Action<Tin1, Tin2, ...> // A void function that accepts Tx parameters
Func<T> // A function that returns an object of type T
Func<Tout, Tin1, Tin2, ...> // A function that returns Tout an accepts Tx as parameters
Predicate<T> // A function that returns bool and accepts parameter T
Oder wenn Sie möchten, dass Ihre eigenen Delegierten mit dem delegate
Stichwort schreiben:
delegate void MySpecialEventHandler(object sender, object data)
Beispiel:
//EventHandler definition
public delegate void PrintedSomethingEventHandler(string message);
//Event
public event PrintedSomethingEventHandler PrintedSomething;
//e.g. "Function Hook"
private Func<string,string> _externalFilter;
public void SetFilter(Func<string,string> filter)
{
_externalFilter = filter;
}
private void PrintA(string message)
{
Debug.WriteLine(message);
}
private void PrintB(string message)
{
Console.WriteLine(message);
}
private bool ContainsProfanity(string message)
{
return message.Contains("%$&!");
}
public void Print(string message, bool debug)
{
Action<string> action;
Predicate<string> filter = ContainsProfanity;
if(filter(message))
return;
if(_externalFilter != null)
message = _externalFilter(message);
if(debug)
action = PrintA;
else
action = PrintB;
action(message);
if(PrintedSomethingEventHandler != null)
PrintedSomethingEventHandler(message);
}
Delegierten werden genau das, was Sie suchen. –
Ändern Sie 'public static method Example' in' public static Action Example', aber Sie benötigen weiterhin seinen Namen, um darauf Bezug zu nehmen, wenn Sie assemblieren – haim770
Auch würde die Zuweisung aussehen wie 'Example = DoSomething;' (ohne '') ') –