我有一个带有通用类型参数的抽象类,以便用户可以在子类中定义正确的功能:
public abstract class Fruit<TFruit>{
public abstract TFruit CutFruit();
public abstract float TypeIndependentMethod();
}
外部类希望在该类中调用与类型无关的抽象方法,并且不需要知道子类的类型参数。它只想调用该类的TypeIndependentMethod()
的实现:
public class FruitLabeler
{
public Fruit fruit = null;
public void WriteLabel(){
float f = fruit.TypeIndependentMethod();
}
}
问题是没有类型参数我不能声明public Fruit fruit
,编译器要求我声明Fruit<Orange> fruit
或Fruit<Apple> fruit
,依此类推。但是我不希望我的{{1 }}仅适用于橘子或苹果,我希望它适用于任何水果。
如何声明FruitLabeler
的实例,该实例与类型无关,或者如何称呼它为与泛型无关的方法?
答案 0 :(得分:1)
如果为类型无关的方法引入IFruit接口,则可以改用IFruit fruit
并在不知道类型的情况下调用方法
public abstract class Fruit<TFruit> : IFruit{
public abstract TFruit CutFruit();
public abstract float TypeIndependentMethod();
}
public interface IFruit
{
public float TypeIndependentMethod();
}
public class FruitLabeler
{
public IFruit fruit = null;
public void WriteLabel(){
float f = fruit.TypeIndependentMethod();
}
}