Usage of interfaces is always the recommended way to enforce a method’s signature – there are no doubts about that. But there are some occasions where you cannot use an interface to achieve this.
I had a scenario this week, in which I had to use some methods dynamically by reflecting them in run time. Basically, these assemblies are created by others and I just consume the methods in run time. To add more problem, there can be any number of these methods. Even though there is an agreed signature for these methods, often times people can forget those ‘trivial’ details, resulting in run time exceptions, which may not be a nice thing to happen in a production system :-). So I wrote a little validation method which will validate a specified method against my signature. First, define a delegate which matches your requirement.
delegate bool MyDesiredSignature(string param1, stringparam2);
Now, extract the method information from the user’s assembly and attempt to create a delegate which matches my delegate (in this case, it will be MyDesiredSignature
).
boolValidateSignature(string methodName, object typeInstance, TypedelegateType)
{
MethodInfo methodInfo = this.GetType().GetMethod(
methodName,
BindingFlags.Instance | BindingFlags.NonPublic);
Delegate methodDelegate = Delegate.CreateDelegate(delegateType, typeInstance, methodInfo, false);
return (methodDelegate != null);
}
Now, we can just call this method for method verification like this:
boolisValidSignature = ValidateSignature("UsersMethodName", this, typeof(MyDesiredSignature));
Happy coding!