猿问

泛型约束问题

能不能将类型参数约束为指定类型,而不是约束为实现了某个接口或继承某个类型。

比如下面一个类:我要求 Tc 的类型 必须是Ta 或者是Tb。

(下面这样定义好象不对。意思好象是Tc 要继承或实现 Ta 和 Tb。)

public class MyClass<Ta, Tb> {

  public void DoSomeThing<Tc>()

      where Tc : Ta, Tb

      {   }

}                  


慕田峪4524236
浏览 308回答 2
2回答

PIPIONE

泛型接口没有或只有且,如果是或的话,你在DoSomeThing方法是到底怎么判断Tc的对象是Ta还是Tb呢,既然不能判断又怎么去调用相应的方法呢……另外你这个即没有返回值也没有参数的方法用泛型的意义在哪里呢……

萧十郎

那当然不可能啊,除非Ta、Tb从一个接口或基类派生。不然您想想,如果不定义基类,Ta有3个方法(A1,A2,A3),而Tb有3个不同的方法(B1,B2,B3),那在未运行前,你怎么才能让编译器识别到啊所以接口和基类起码可以保证子类有此方法,在运行时才能动态的调用
随时随地看视频慕课网APP
我要回答