我正在玩C#中的接口并进行实验,我试图从接口继承以在子类中实现其方法,但是其中一个子类中,我要添加一个不在C#中的方法。界面,但我无法调用它。
我该怎么做?这就是我所拥有的
接口:
console.log(window.FruitasticApi);
课程:
interface IShape
{
double GetPerimeter();
double GetArea();
}
主程序:
public class Square : IShape
{
public double GetPerimeter()
{
// all code here
}
public double GetArea()
{
// all code here
}
}
public class Rectangle : IShape
{
public double GetPerimeter()
{
// all code here
}
public double GetArea()
{
// all code here
}
public string PrintShape()
{
return "This is a rectangle!"
}
}
如果我尝试从Rectangle类调用方法“ PrintShape”,则不允许这样做,我该如何使用非接口提供的方法?
谢谢!
答案 0 :(得分:3)
您在这里有一些误解,接口只是您的类必须实现的一堆方法。您不继承接口,而是实现接口。
现在遇到问题了。由于IShape不知道PrintShape方法,因此如果您定义是否尝试调用shape.PrintShape()
,由于我上面提到的原因,它将无法编译。
您该如何解决?您有2个选择1可以像这样((Rectangle)shape).PrintShape()
或您建议的实际形状,为接口提供签名,并在正方形中将其实现为空
答案 1 :(得分:1)
由于该方法特定于该对象,因此必须将接口强制转换为该对象。
var text = ((Rectangle)shape).PrintShape();
如果要确保仅将其应用于矩形as,请检查其是否不为空。
var rectangle = shape as Rectangle;
if (rectangle != null)
var text = rectangle.PrintShape();