我有界面IPet
,而在另一个项目中我有Dog
继承自IPet
的课程。
在Dog
中,我的方法为Bark()
,但IPet
没有
在IPet
的项目中,我还有一个PetSimulation
类,其中我有一个IPet
的实例。
现在我想做这样的事情:
IPet myDog = new IPet("Rex");
myDog.Bark();
但是IPet
没有方法Bark()
,并且应该保持这种方式,因为其他类(例如Cat
和Horse
)也是从IPet
继承的但也没有方法Bark
我也做不到这样的事情:
Dog myDog = new Dog("Rex");
因为Dog
在另一个项目中。
有没有办法让我在接口Bark
上调用子类Dog
的方法IPet
而不在那里实现方法?
答案 0 :(得分:2)
简短回答:不。
答案稍长:
您可以测试IPet
以查看它是否为Dog
,如下所示:
Dog dog = myDog as Dog;
if (dog != null)
{
dog.Bark();
}
请注意,您无法像在问题中那样直接创建界面,very rare circumstances除外。
答案 1 :(得分:1)
public interface IPet
{
}
public interface IDog : IPet
{
void Bark();
}
public class Dog : IDog
{
public void Bark()
{
Console.WriteLine("Wouff!");
}
}
答案 2 :(得分:0)
您需要将myDog强制转换为Dog才能访问只有该类具有的方法:
IPet myDog = new IPet("Rex");
((Dog)myDog).Bark();
如果在界面中实现Bark,那么实现它的所有类都需要它。
您可以通过添加对Dog的项目的参考来访问Dog吗?
答案 3 :(得分:0)
如果您真的无法访问Dog类并且正在使用.NET 4+,那么您可以尝试
dynamic dog = new ...
dog.Bark()