无法提取通用接口

jra*_*ali 6 oop abstract-class design-patterns interface

我想创建一个可以在不同数字基础之间切换的计算器应用程序.就输入数字而言,我认为以下是灵活的api:

public interface ICalculator
{
    string Enter(INumberElement element);
}

public class BaseTenCalculator : ICalculator
{
    public string Enter(INumberElement element)
    {
        ...
    }
}

public class BaseTwoCalculator : ICalculator
{
    public string Enter(INumberElement element)
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,对于BaseTenCalculator,我想要一个方法

Enter(BaseTenNumberElement element)
Run Code Online (Sandbox Code Playgroud)

对于BaseTwoCalculator,我想要一个方法

Enter(BaseTwoNumberElement element)
Run Code Online (Sandbox Code Playgroud)

确保只输入该数字基数的有效数字.但是,我能想到强制执行此约束的唯一方法是在两个不同的实现中向下转换'element'参数,如果INumberElement的类型不正确则抛出异常.我觉得这是'错的',我错过了一些东西.还有另外一种方法吗?是否可以为两个不同数量的基础计算器创建一个通用接口?

小智 4

    public interface ICalculator<in T> where T : INumberElement
    {
        string Enter(T element);
    }

    public class BaseTenCalculator : ICalculator<BaseTenNumberElement> 
    {
        public string Enter(BaseTenNumberElement element)
        {
            throw new NotImplementedException();
        }
    }

    public class BaseTwoCalculator : ICalculator<BaseTwoNumberElement>
    {
        public string Enter(BaseTwoNumberElement element)
        {
            throw new NotImplementedException();
        }
    }
Run Code Online (Sandbox Code Playgroud)