[英]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.