3

我正在尝试将此 Java (Android) 代码转换为 c# (MonoDroid),但我不明白<Item extends OverlayItem>

public class BalloonOverlayView<Item extends OverlayItem> extends FrameLayout
4

3 回答 3

9

它为类型参数添加了一个约束。它类似于whereC# 中的子句。

在 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

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

有关何时要使用这样的类型约束的讨论,我在上一个答案中详细讨论了这一点。

于 2012-05-27T23:58:18.203 回答
3

与此相同:

public class BalloonOverlayView<Item> : FrameLayout where Item : OverlayItem
于 2012-05-27T23:57:30.887 回答
1

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

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

于 2012-05-27T23:59:00.063 回答