有没有一种方法可以在不定义类型的情况下使用通用类型参数声明对象?

时间:2020-11-11 22:14:59

标签: c# types abstract-class abstraction

我有一个带有通用类型参数的抽象类,以便用户可以在子类中定义正确的功能:

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> fruitFruit<Apple> fruit,依此类推。但是我不希望我的{{1 }}仅适用于橘子或苹果,我希望它适用于任何水果。

如何声明FruitLabeler的实例,该实例与类型无关,或者如何称呼它为与泛型无关的方法?

1 个答案:

答案 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();
        }
    }