Я пытаюсь выяснить, содержит ли AppDelegate
определенное свойство/способ. Для этого я нашел Check if a property exist in a class и How to check whether an object has certain method/property?, но AppDelegate
кажется другим.Проверьте, существует ли метод/свойство в AppDelegate
Ниже не компилируется
if(AppDelegate.HasMethod("SomeMethod"))
потому
AppDelegate не содержит дефиниция для
HasMethod
.
Я также пробовал другие варианты, но мне не удалось успешно проверить, существует ли метод/свойство или нет. Более того, respondsToSelector
здесь не применим. GetType()
также не доступен для AppDelegate
.
Каков правильный способ проверки наличия свойства/метода в AppDelegate
?
Edit:
Кажется, что мне нужен экземпляр 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
, вы можете использовать другие C# /. NET методы (HasMethod
, HasProperty
из связанных потоков), если у вас есть экземпляр AppDelegate
. Вопрос для меня в том, как я могу заверить, что Self
реализован в AppDelegate
?
Да, компилятор проверяет это для меня, но я хочу выполнить метод только в том случае, если он реализован. Это не должно быть необходимостью его реализации. Он также должен работать без YourMethod
.
Является ли решение @ try/catch подходящим? Это немного грубый метод, но он должен работать. – mylogon
@mylogon: Это было бы возможно, но будет ли он компилироваться, если я получу доступ к свойству, которое может не существовать? – testing