我正在尝试将此 Java (Android) 代码转换为 c# (MonoDroid),但我不明白<Item extends OverlayItem>
public class BalloonOverlayView<Item extends OverlayItem> extends FrameLayout
我正在尝试将此 Java (Android) 代码转换为 c# (MonoDroid),但我不明白<Item extends OverlayItem>
public class BalloonOverlayView<Item extends OverlayItem> extends FrameLayout
它为类型参数添加了一个约束。它类似于where
C# 中的子句。
在 Java 中,您有:
public class BalloonOverlayView<Item extends OverlayItem> extends FrameLayout
whereItem
是必须子类化或实现 type 的类型参数OverlayItem
。在 C# 中,这将被写为:
public class BalloonOverlayView<Item> : FrameLayout where Item : OverlayItem
您可以看到约束是如何移动到最后的,但在其他方面类似。在 C# 中,为类型参数命名以 a 为前缀是非常常见的做法T
,因此我推荐这样的名称TItem
:
public class BalloonOverlayView<TItem> : FrameLayout where TItem : OverlayItem
这有助于明确类型参数和普通类型之间非常重要的区别。
有关何时要使用这样的类型约束的讨论,我在上一个答案中详细讨论了这一点。
与此相同:
public class BalloonOverlayView<Item> : FrameLayout where Item : OverlayItem
这意味着参数化类型Item
必须是OverlayItem
从语义上讲,这意味着如果 BalloonOverlayView 不扩展,则使用参数化类型实例化它是没有意义的OverlayItem