有没有一种方法可以捕获方法调用而无需将其订阅任何事件?

时间:2018-10-21 22:38:13

标签: c# events

假设我们有这种情况:

不允许您修改其中任何内容的类:

 public class ForbiddenClass_A
    {

        public void TheMethod()
        {
            //do stuff
        }
    }

和另一个只读类,该只读类调用上一个类中的方法:

public class ForbiddenClass_B
{
    ForbiddenClass_A fc_a;

    void Update()
    {
        //some logic that if true it will call :
        fc_a.TheMethod();
    }
}

现在您有了自己的课程,您可以对其进行任何操作,然后您要从中知道 TheMethod()

public class MyClass
{
    //call this when TheMethod() from ForbiddenClass_A is called.
    public void TheMethod_Catcher()
    {

    }
}

谢谢!

1 个答案:

答案 0 :(得分:2)

  

是否有一种方法可以捕获方法调用而不将其订阅给任何方法   这类事件?

解耦消息传递可能是event aggregator或任何其他pub子方法消息传递系统想要的位置。尽管您仍然必须订阅某些内容,但参与者不必彼此了解,可以将方法设为私有。

Unity MvvmLight 都具有这类消息传递系统,但它们确实是一角钱,有很多

此方法可能如何工作的示例

public CreateUserForm()
{
    InitializeComponent();
    EventPublisher.Instance.Subscribe<NewUserCreated>
        (n => listBoxUsers.Items.Add(n.User.Name));
}

...

// some other class
private void Update()
{

    var user = new User()
               {
                   Name = textBoxUserName.Text,
                   Password = textBoxPassword.Text,
                   Email = textBoxEmail.Text
               };
    EventPublisher.Instance.Publish(new NewUserRequested(user));
}

更新

如果您对.net感兴趣,可以使用注入技术

Dynamically replace the contents of a C# method?