0

我有接口IPet,在另一个项目中我有Dog继承自IPet.
Dog我有方法Bark()但没有在IPet.
在我的项目中,IPet我还有一个类PetSimulation,其中我有一个IPet.
现在我想做这样的事情:

IPet myDog = new IPet("Rex");  
myDog.Bark();  

但是IPet没有该方法Bark(),并且应该保持这种方式,因为其他类(例如CatHorse)也继承自IPet但也没有该方法Bark
我也不能这样做:

Dog myDog = new Dog("Rex");  

因为Dog在另一个项目中。

有什么办法让我通过接口调用Bark子类的方法而不在那里实现方法?DogIPet

4

4 回答 4

2

简短的回答:没有。

稍微长一点的答案:

您可以测试IPet以查看它是否为Dog,如下所示:

Dog dog = myDog as Dog;
if (dog != null)
{
    dog.Bark();
}

请注意,您不能像在问题中那样直接创建界面,除非在极少数情况下

于 2012-11-02T15:14:26.770 回答
1

你不能。但是你可以使用 Bark 方法创建一个接口 IDog,它会继承自 IPet

public interface IPet
{

}

public interface IDog : IPet
{
    void Bark();    
}

public class Dog : IDog
{
    public void Bark()
    {
        Console.WriteLine("Wouff!");    
    }
}
于 2012-11-02T15:20:24.663 回答
0

如果您真的无法访问 Dog 类并且正在使用 .NET 4+,您可以尝试

dynamic dog = new ...
dog.Bark()
于 2012-11-02T15:14:38.417 回答
0

您需要将 myDog 转换为 Dog 才能访问只有该类具有的方法:

IPet myDog = new IPet("Rex");  
((Dog)myDog).Bark();  

如果您在接口中实现 Bark,那么所有实现它的类都需要它。

您可以通过添加对 Dog 的项目的引用来访问 Dog 吗?

于 2012-11-02T15:12:12.597 回答