C#中可以通过反射分析元数据来解决这个问题,示例代码如下:
using System; using System.Reflection; namespace Hello { class Program { static void Main(string[] args) { if (IsMethodDefined(typeof(Utils), "HelloWorld")) { Console.WriteLine("Utils类中有方法HelloWorld"); } else { Console.WriteLine("Utils类中没有方法HelloWorld"); } Console.ReadKey(); } /// <summary> /// 判断一个类中有无"指定名称"的方法 /// </summary> /// <param name="type"></param> /// <param name="methodName"></param> /// <returns></returns> static bool IsMethodDefined(Type type,string methodName) { bool result = false; foreach (MemberInfo m in type.GetMembers()) { if (m.Name == methodName) { result = true; break; } } return result; } } public static class Utils { public static void HelloWorld() { Console.WriteLine("Hello World!"); } } }
在obj-C中,则是通过选择器selector来判断的
Sampe.h #import <Foundation/Foundation.h> @interface Sample : NSObject { } -(void) print:(NSString*) msg; @end
Sample.m
#import "Sample.h" @implementation Sample -(void) print:(NSString*) msg { NSLog(@"%@",msg); } @end
main函数:
#import <Foundation/Foundation.h> #import "Sample.h" int main (int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; Sample *s = [Sample new]; if ([s respondsToSelector:@selector(print:)]) //这一行就是判断实例s中有没有方法print { [s print:@"Hello World"]; } else { NSLog(@"%@",@"Sample类中没有定义方法print"); } [s release]; [pool drain]; return 0; }
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦