Java到C#:在Generic中扩展

我试图将这个Java(Android)代码转换为c#(MonoDroid),但我不明白

 public class BalloonOverlayView extends FrameLayout 

它正在为type参数添加一个约束。 它类似于C#中的where子句。

在Java中,您有:

 public class BalloonOverlayView extends FrameLayout 

其中Item是必须子类化或实现OverlayItem类型的类型参数。 在C#中,这将被写为:

 public class BalloonOverlayView : FrameLayout where Item : OverlayItem 

您可以看到约束如何移动到最后,但在其他方面类似。 在C#中通常使用前缀为T类型参数 ,因此我建议使用名称TItem如下所示:

 public class BalloonOverlayView : FrameLayout where TItem : OverlayItem 

这有助于明确类型参数和普通类型之间非常重要的区别。

有关何时需要使用类型约束的讨论, 我将在前一个答案中详细讨论。

它与此相同:

 public class BalloonOverlayView : FrameLayout where Item : OverlayItem 

或者它是。 我对我没有VS. (我在酒店的电脑上)

这意味着参数化类型Item必须是OverlayItem的子类

从语义上讲,这意味着如果不扩展OverlayItem ,则使用参数化类型实例化BalloonOverlayView是没有意义的。