То, что вы говорите, невозможно. Когда у класса есть экземпляр делегата, никто не может помешать ему вызвать его. Таким образом, если бы класс B
мог передать делегат myMethod
, он также мог бы вызывать этот делегат напрямую, если только methodA
и methodB
не нужны специальные параметры, о которых знает только A
, чтобы сделатьчто-нибудь полезное.
Один из способов сделать что-то подобное - создать перечисление, называемое чем-то вроде MethodOfA
, и объявить MethodA
и MethodB
в качестве возможных значений перечисления. В классе A
объявите приватный Dictionary<MethodOfA, MyDelegate> methodDict
, который записывает, что соответствует каждому значению перечисления. Затем объявите еще одну перегрузку myMethod
, которая принимает MethodOfA
следующим образом:
public static int myMethod(int data, MethodOfA action)
=> myMethod(data, methodDict[action]);
Тем не менее, для меня это выглядит как плохой дизайн. Возможно, вам не нужна перегрузка myMethod(int, MyDelegate)
, и просто проверьте перечисление, чтобы выполнить соответствующее действие. Другая вещь, которую вы можете попробовать - это шаблон стратегии .