我有一个课程需要列出实现View
的{{1}}。如果我这样定义:
INavigationWrapper
然后我需要在其他地方指定T.如果我这样定义:
public class NavigationStackLayout : Layout<T> where T : View, INavigationWrapper
或
public class NavigationStackLayout : Layout<View>
然后是班级&#39;孩子们缺少他们类型的一部分。如果我这样定义:
public class NavigationStackLayout : Layout<INavigationWrapper>
然后这是一个语法错误。如何在泛型参数中指定类和接口,而无需指定特定的子类?
更新:
要明确,我不拥有public class NavigationStackLayout : Layout<View : INavigationWrapper>
,所以我不能只将泛型方法添加到我的非泛型类中;我需要使用Layout<T>
的现有方法。我知道他们会工作,因为Layout<T>
上的约束是Layout<T>
。
我正在寻找能够完成以下工作的解决方案:
where T : View
答案 0 :(得分:0)
假设您只需将一个类放入每个NavigationStackLayout
对象中即可,您可以使用通用路由并在单独的非泛型类上添加静态方法,该类以通用方式创建实例并允许您避免必须命名通用参数。
或者选择一个具体的类,因为过于通用的代码不值得那么麻烦。
作为最终选项,您可以重新实现所有函数作为通用函数并约束类型,只需为您的底层存储选择一种类型或另一种类型,然后在取出时将其强制转换。
根本问题是你需要一个类型来填充泛型参数。您需要向其他人提出要求并让其他人做出选择(通用)或选择存在的单一类型(因此View
或INavigationWrapper
)。
请注意,如果您希望以下类型在单个布局中共存,无论您做什么,您都会稍微修改类型安全规则(例如选择任意基类进行存储)。
class View1 : View, INavigationWrapper
class View2 : View, INavigationWrapper