2016-09-11 1 views
0

Есть ли что-нибудь вроде onSaveDataMethod.Call как триггер в C#Могу ли я вызвать метод для другого события вызова метода в C#?

Я не хочу напрямую обращаться к методу в коде.

, например:

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

saveRecord(); 
return true; 

} 
+1

Нет, там нет, если вы его делаете. –

+0

вы можете получить этот эффект ... но это немного сложнее ... https://en.wikipedia.org/wiki/Interceptor_pattern – DarkSquirrel42

+0

можно использовать делегат и событие. –

ответ

0

К сожалению, ответ нет, вы должны написать свой собственный validation метод.

+0

У меня есть метод validate(), теперь я хочу вызвать этот метод без вызова метода save(), но при вызове метода save(). –

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

Вы можете сделать что-то вроде этого если у вас есть базовый класс, который все остальные, унаследованный от. Только базовый класс когда-либо узнает о функции internalSave, и все унаследованные классы будут вызывать сохранение и автоматически проверяться.

Изменить модификатор доступа участника (защищенный) на функцию сохранения в соответствии с вашими потребностями, но оставить 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(); 
    } 
} 
Смежные вопросы