C#:实现特定接口的方法参数

时间:2015-07-31 02:08:47

标签: c# objective-c .net xamarin.ios

我们说我有一个名为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#中找到等效声明。

2 个答案:

答案 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
    }