Код: Выделить всё
public class StrongHooksTest
{
[Fact]
public void NoInvocations()
{
//Hooks.TestHook += (x) => 1234;
var a = Hooks.TestHook.Invoke;
}
static class Hooks
{
public delegate int TestDelegate(int a);
public static TestDelegate TestHook;
}
}
Группы методов не могут быть обнуляемыми, поэтому Hooks.TestHook?.Invoke не работает.
Теперь вы можете спросить, зачем мне это делать?
Я пытаюсь динамически вызывать делегатов через оболочку со строго типизированными параметрами и возвращаемыми значениями. Для этого требуется трюк Delegate.Invoke, который раскрывает подпись делегата, которую я затем злоупотребляю универсальными типами в своем методе-оболочке.
Пример метода-оболочки:
Код: Выделить всё
TResult Run(Func hook, T arg);
Код: Выделить всё
int result = Run(Hooks.TestHook.Invoke, 1234);
Какие варианты мне нужно сделать? иметь дело с неинициализированными полями делегата, не требуя от вызывающей стороны моей оболочки выполнения дополнительной логики (и без потери строгой типизации)?
Подробнее здесь: https://stackoverflow.com/questions/787 ... ate-fields