我们说我有一个名为UIViewController
的课程。
public class UIViewController
{
// ... methods
}
我有一个界面IDoFancyFlips
public interface IDoFancyFlips
{
// ... methods
}
我有一个扩展UIViewController
的类,并按如下方式实现接口。
public class FancyViewController : UIViewController, IDoFancyFlips
{
// ... methods
}
现在我想编写一个方法,该方法将UIViewController
作为参数,但仅限实现IDoFancyFlips
的方法。
public void FlipAndShow(??? controller) {
// implementation
}
我的问题是我将什么放在???中。我似乎无法找到任何办法。
我可以在Objective C中执行以下操作:
- (void) flipAndShow:(UIViewController<IDoFancyFlips>*) controller {
// implementation
}
但我无法在C#中找到等效声明。
答案 0 :(得分:4)
您可以使用泛型来完成此任务。请尝试以下方法:
public void FlipAndShow<TFancyFlippingController>
(TFancyFlippingController fancyFlippingController)
where TFancyFlippingController : UIViewController, IDoFancyFlips
{
// implementation
}
where TFancyFlippingController : UIViewController, IDoFancyFlips
约束确保为TFancyFlippingController
指定的参数必须都从UIViewController
继承并实现IDoFancyFlips
接口。
答案 1 :(得分:0)
考虑到所有特定视图控制器都继承自基类UIViewController
类
public class FancyViewController : UIViewController, DoFancyFlips
{
// ... methods
}
public class NormalViewController : UIViewController
{
// ... methods
}
您可以在运行时检查传递的实例是否为DoFancyFlips
类型,然后进一步处理;像
public static void FlipAndShow(UIViewController controller)
{
if (!(controller is DoFancyFlips))
return;
// implementation
}