如果没有反射,或者有反射,这是可能的吗?这是PHP中经常使用的东西,比如在Wordpress中。
伪代码中的一些东西:
if (exists(object.method)) {object.method}
或
try {object.method} finally {...}
发布于 2011-01-31 22:04:55
您可以使用动态并捕获运行时异常:
dynamic d = 5;
try
{
Console.WriteLine(d.FakeMethod(4));
}
catch(RuntimeBinderException)
{
Console.WriteLine("Method doesn't exist");
}
虽然这听起来更像是一个设计问题。
免责声明
这段代码不是用来用的,只是一个可以做的例子。
发布于 2011-01-31 22:03:12
你可以在一个接口中声明它,然后使用:
IFoo foo = bar as IFoo;
if (foo != null)
{
foo.MethodInInterface();
}
但前提是您可以让对象的实际类型实现接口。
否则,您将需要使用反射AFAIK。
(编辑:这里提到的动态类型也可以在.NET 4上使用,当然……但是为此而捕获异常是相当糟糕的IMO。)
发布于 2019-10-05 02:37:36
使用.GetType().GetMethod()
检查它是否存在,然后对其执行.Invoke()
。
var fooBar = new FooBarClass();
var method = fooBar.GetType().GetMethod("ExistingOrNonExistingMethod");
if (method != null)
{
method.Invoke(fooBar, new object[0]);
}
https://stackoverflow.com/questions/4856644
复制相似问题