如何使用在子类中创建的方法(不是在接口上实现的方法) C#.NET

时间:2019-06-05 15:36:24

标签: c# .net interface

我正在玩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”,则不允许这样做,我该如何使用非接口提供的方法?

谢谢!

2 个答案:

答案 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();