众所周知,在Objective C中,我们可以使用如下代码id myClone = [anObject performSelector:@selector(unknownMethod)];
向对象发送消息,即使我们不知道对象是否具有实现。但是我不知道如何在C#中做到这一点。
我已经知道我们也可以像在Objective C中一样在C#中使用委托语法,但是我找不到C#中的任何概念,就像在Objective C中的协议一样。
你能给我一些提示吗?请输入一些关键词:-)
最佳答案
1)使用reflection。这种方法允许您处理anObject
没有所需方法的情况。
Type t = anObject.GetType();
MethodInfo method = t.GetMethod("UnknownMethod");
object result = method.Invoke(anObject, new object[] { [...Parameters...] });
2)使用
dynamic
类型。当然,这意味着类型安全仅在运行时强制执行,并且可能会导致性能下降。object getValue(dynamic obj)
{
return (object)obj.UnknownMethod([...Parameters...]);
}
3)使
anObject
实现一个接口。然后您可以执行((ISomething)anObject).UnknownMethod([...])
当然,这假定您拥有创建anObject
的代码。4)强制转换为适当的类型并执行该方法。
object getValue(object anObject)
{
if (anObject is MyType1) ...
else if (anObject is MyType2) ...
}
无论选择哪种方法,请记住它们都有缺点。反射可能需要进行一些调整才能选择方法。
关于c# - 如何像在 objective-c 中那样在C#中执行选择器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32187743/