簡體   English   中英

我可以在C#中的另一個方法調用事件上觸發一個方法嗎?

[英]Can I trigger a method on another method call event in C#?

有沒有像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;

}

不幸的是,答案是否定的 ,您必須編寫自己的validation方法。

您可以將Intercepting Methods與PostSharp一起使用。 創建外觀(查看更多信息 ):

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;
}

假設您有一個所有其他類都繼承自的基類,則可以執行類似的操作。 只有基類會知道internalSave函數,所有繼承的類都將調用save並自動進行驗證。

修改save函數上的成員訪問修飾符(受保護)以適合您的需要,但將internalSave保留為私有,以避免調用該函數並繞過驗證。

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

如果因為已經存在一個無法修改的基類而無法擁有基類,那么您也可以考慮使用擴展方法

public static class BaseClassNameExtensions
{
   public static bool ValidatedSave(this BaseClassName obj)
   {
       obj.validate(); //again assuming it throws an exception
       return obj.save();
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM