protected override void AddSignature(SignatureHelper signature)
 {
     signature.AddData((byte)MethodCallingConvention);
     signature.AddData(paramTypes.Length + optionalParamTypes.Length);
     signature.AddArgumentSignature(ReturnType);
     foreach (var type in paramTypes)
     {
         signature.AddArgumentSignature(type);
     }
     if (VarArgs && optionalParamTypes != null)
     {
         signature.AddSentinel();
         foreach (var type in optionalParamTypes)
         {
             signature.AddArgumentSignature(type);
         }
     }
 }