I just had a very interesting experience with AOP in C#. I have a function with a return type List
So the code looks a little bit like this:
List<Update> updates = Manager.ValidateAndCreate();
// protected void Save(List<Update> updates) { ....
Save(updates);
The Method Interceptor looks like the following
public class ExceptionAdvice : AopAlliance.Intercept.IMethodInterceptor {
public object Invoke(AopAlliance.Intercept.IMethodInvocation invocation) {
if (isValid(invocation)) {
return invocation.Proceed();
} else {
return false;
}
}
private bool isValid( ...
}
Now after validation fails the value of updates is actually a boolean not a List
updates.GetType().Name == "Boolean"
But:
updates is bool == false
So save will still accept its mutated list of updates and will complain later on when you try to use it.
So how is this possible in a type safe language like C#? btw it's spring-aop.