我可以在C#中的另一个方法调用事件上触发一个方法吗?

时间:2016-09-11 18:54:20

标签: c# winforms

是否有像onSaveDataMethod.Call这样的东西,比如C#中的触发器

我不想直接在代码中调用方法。

例如:

bool save()
{
validate()  // id do not want to call this validate() method
            // it should be called automatically before saving method 

saveRecord();
return true;

}

3 个答案:

答案 0 :(得分:0)

不幸的是答案是,你必须编写自己的validation方法。

答案 1 :(得分:0)

您可以将Intercepting Methods与PostSharp一起使用。创建方面(参见more):

using PostSharp.Aspects;
using PostSharp.Serialization;

[PSerializable]
public class ValidationAspect : OnMethodBoundaryAspect
{
    public override void OnEntry(MethodExecutionArgs args)
    {
        // make you validation here
        validate();
    }
}

将属性应用于您的方法:

[ValidationAspect]
bool save()
{
    saveRecord();
    return true;
}

答案 2 :(得分:0)

你可以做这样的事情,假设你有一个所有其他人继承的基类。只有基类才能知道internalSave函数,所有继承的类都会调用save并自动验证。

修改保存功能的成员访问修饰符(受保护)以满足您的需要,但将internalSave保留为私有,以避免调用该功能并绕过验证。

%rbp

如果你不能拥有一个基类,因为你已经存在一个你无法修改的基类,你也可以看一下使用扩展方法

protected bool save(){
   validate(); //Assuming this throws an exception to inform it is not valid
   return internalSave();
}
private bool internalSave(){
    saveRecord();
    return true;
}