gpt4 book ai didi

c# - 检查 AppDelegate 中的方法/属性是否存在

转载 作者:行者123 更新时间:2023-11-28 21:36:10 24 4
gpt4 key购买 nike

我试图找出 AppDelegate 是否包含某个属性/方法。为此我找到了Check if a property exist in a classHow to check whether an object has certain method/property? , 但 AppDelegate 似乎有所不同。

下面的不会编译

if(AppDelegate.HasMethod("SomeMethod"))

因为

AppDelegate does not contain a defintion for 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,您也可以使用其他 C#/.NET 方法(HasMethodHasProperty 来自链接的线程)如果你有 AppDelegate 的实例。我的问题是如何确保 SelfAppDelegate 中实现?

是的,编译器会为我检查,但我只想在实现后才执行该方法。实现它不应该是必要的。它也应该在没有 YourMethod 的情况下工作。

最佳答案

终于找到解决办法了。首先你需要两个扩展方法:

public static class GeneralExtensions
{
public static bool HasProperty(this object obj, string propertyName)
{
return obj.GetType().GetProperty(propertyName) != null;
}

public static bool HasMethod(this object objectToCheck, string methodName)
{
var type = objectToCheck.GetType();
return type.GetMethod(methodName) != null;
}
}

检查你使用的方法

if (UIApplication.SharedApplication.Delegate.HasMethod("YourMethod")){
// do something
}

检查您使用的属性

if (UIApplication.SharedApplication.Delegate.HasProperty("Instance"))
// do something
}

这个想法来自 this thread

但这并不是故事的结局。我的 final方法可以在 here 中找到。

关于c# - 检查 AppDelegate 中的方法/属性是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33870170/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com