【发布时间】:2016-02-25 12:11:15
【问题描述】:
我试图找出AppDelegate 是否包含某个属性/方法。为此我找到了Check if a property exist in a class 和How to check whether an object has certain method/property?,但AppDelegate 似乎有所不同。
以下不会编译
if(AppDelegate.HasMethod("SomeMethod"))
因为
AppDelegate 不包含
HasMethod的定义。
我也尝试了其他变体,但未能成功检查方法/属性是否存在。此外respondsToSelector 似乎不适用于这里。 GetType() 也不适用于AppDelegate。
检查AppDelegate 中的属性/方法是否存在的正确方法是什么?
编辑:
看来我需要一个AppDelegate 的实例来使用它。我的问题是如何确保此实例可用?例如。没有实现就抛出异常?
你可以这样做:
AppDelegate
public static new AppDelegate Self { get; private set; }
public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
{
AppDelegate.Self = this;
return true;
}
[Export ("YourMethod:")]
public void YourMethod (bool setVisible){
// do something
}
一些类
if(AppDelegate.Self.RespondsToSelector(new Selector("YourMethod:")))
{
AppDelegate.Self.YourMethod (true);
}
您不需要使用respondsToSelector,如果您有AppDelegate 的实例,您也可以使用其他C#/.NET 方法(来自链接线程的HasMethod、HasProperty)。我的问题是如何确保Self 在AppDelegate 中实现?
是的,编译器会帮我检查,但我只想在方法被实现时才执行它。它不应该是实施它的必要条件。它也应该在没有YourMethod 的情况下工作。
【问题讨论】:
-
@try/catch 解决方案是否合适?这是一个有点粗略的方法,但应该可以。
-
@mylogon:这是可能的,但如果我访问一个可能不存在的属性,它会编译吗?
标签: c# ios reflection xamarin xamarin.ios