Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

[C#] Validate a Method’s Signature in Run Time

0.00/5 (No votes)
30 Apr 2012 1  
A little validation method which will validate a specified method against my signature

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, // The method's name.
        BindingFlags.Instance | BindingFlags.NonPublic);
        // Change this accordingly for static/public methods.

      // Attempt to create a delegate of my delegate type from the method info.
      Delegate methodDelegate = Delegate.CreateDelegate(delegateType, typeInstance, methodInfo, false);

      // If we have 'methodDelegate' as null, then that
      // means the delegate does not match our signature
      // or else we have a match.
      return (methodDelegate != null);
}

Now, we can just call this method for method verification like this:

boolisValidSignature = ValidateSignature("UsersMethodName", this, typeof(MyDesiredSignature));

Happy coding!

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here