C#:实现特定接口的方法参数
C#: A method parameter that implements a particular interface
假设我有一个名为 UIViewController
的 class。
public class UIViewController
{
// ... methods
}
我有一个接口IDoFancyFlips
public interface IDoFancyFlips
{
// ... methods
}
我有一个 class 扩展 UIViewController
并实现接口如下。
public class FancyViewController : UIViewController, IDoFancyFlips
{
// ... methods
}
现在我想写一个方法,它接受一个 UIViewController
作为参数,但只有实现 IDoFancyFlips
.
的方法
public void FlipAndShow(??? controller) {
// implementation
}
我的问题是我要在 ??? 中输入什么。我似乎找不到任何方法来做到这一点。
我可以在 Objective C 中执行以下操作:
- (void) flipAndShow:(UIViewController<IDoFancyFlips>*) controller {
// implementation
}
但我在 C# 中找不到等效的声明。
您可以使用泛型来完成此操作。尝试以下操作:
public void FlipAndShow<TFancyFlippingController>
(TFancyFlippingController fancyFlippingController)
where TFancyFlippingController : UIViewController, IDoFancyFlips
{
// implementation
}
where TFancyFlippingController : UIViewController, IDoFancyFlips
约束确保为 TFancyFlippingController
指定的参数必须继承自 UIViewController
并实现 IDoFancyFlips
接口。
考虑到您所有的特定视图控制器都继承自基础 UIViewController
class
public class FancyViewController : UIViewController, DoFancyFlips
{
// ... methods
}
public class NormalViewController : UIViewController
{
// ... methods
}
可以在运行时检查传入的实例是否为DoFancyFlips
类型,再做进一步的处理;喜欢
public static void FlipAndShow(UIViewController controller)
{
if (!(controller is DoFancyFlips))
return;
// implementation
}
假设我有一个名为 UIViewController
的 class。
public class UIViewController
{
// ... methods
}
我有一个接口IDoFancyFlips
public interface IDoFancyFlips
{
// ... methods
}
我有一个 class 扩展 UIViewController
并实现接口如下。
public class FancyViewController : UIViewController, IDoFancyFlips
{
// ... methods
}
现在我想写一个方法,它接受一个 UIViewController
作为参数,但只有实现 IDoFancyFlips
.
public void FlipAndShow(??? controller) {
// implementation
}
我的问题是我要在 ??? 中输入什么。我似乎找不到任何方法来做到这一点。
我可以在 Objective C 中执行以下操作:
- (void) flipAndShow:(UIViewController<IDoFancyFlips>*) controller {
// implementation
}
但我在 C# 中找不到等效的声明。
您可以使用泛型来完成此操作。尝试以下操作:
public void FlipAndShow<TFancyFlippingController>
(TFancyFlippingController fancyFlippingController)
where TFancyFlippingController : UIViewController, IDoFancyFlips
{
// implementation
}
where TFancyFlippingController : UIViewController, IDoFancyFlips
约束确保为 TFancyFlippingController
指定的参数必须继承自 UIViewController
并实现 IDoFancyFlips
接口。
考虑到您所有的特定视图控制器都继承自基础 UIViewController
class
public class FancyViewController : UIViewController, DoFancyFlips
{
// ... methods
}
public class NormalViewController : UIViewController
{
// ... methods
}
可以在运行时检查传入的实例是否为DoFancyFlips
类型,再做进一步的处理;喜欢
public static void FlipAndShow(UIViewController controller)
{
if (!(controller is DoFancyFlips))
return;
// implementation
}