在C#中的接口实现中使用继承的接口

时间:2015-12-02 21:02:32

标签: c# inheritance interface

如何实现获取继承接口的函数? 我有这些接口:

interface IAnimal
interface IDog : IAnimal
interface ICat : IAnimal

interface IShelter
class DogShelter : IShelter
class CatShelter : IShelter

现在我希望IShelter有一个功能:

Store(IAnimal animal)

但是我希望DogShelter像这样实现它:

Store(IDog animal) 

和CatShelter是这样的:

Store(ICat animal).

有办法做到这一点吗? 除了DogShelter实施Store(IAnmial动物)并检查“if(animal is IDog)”之外?

我应该使用Store(IAnimal animal)然后用(IDog)动物进行投射吗?

(我想使用关于IDog和ICat的接口继承。在实际代码中不能进行类继承) (计算时间在这一点上是有点重要的。使用Store(IDog动物)而不是检查“if(animal is IDog)”是否更便宜?还是只是为了方便?)

1 个答案:

答案 0 :(得分:5)

这是解决方案。您应该使用generics constraints

        interface IShelter<T> where T : IAnimal
    {
        void Store(T animal);
    }
    class DogShelter : IShelter<IDog>
    {
        public void Store(IDog animal)
        {
            throw new NotImplementedException();
        }
    }
    class CatShelter : IShelter<ICat>
    {
        public void Store(ICat animal)
        {
            throw new NotImplementedException();
        }
    }