c# - 如何使用在子类中创建的方法(不是在接口上实现的方法) | C# .NET
问题描述
我正在玩和试验 C# 中的接口,我试图从接口继承以在子类中实现它们的方法,但是其中一个子类,我正在添加一个不在接口中但我的方法不能调用它。
我怎么能那样做?这就是我所拥有的
界面:
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!"
}
}
主程序:
IShape shape = null;
Console.WriteLine("Select Shape");
Console.WriteLine("1- Rectangle");
Console.WriteLine("2- Square");
int shapeSelected = int.Parse(Console.ReadLine());
if (shapeSelected.Equals(1))
{
shape = new Rectangle();
}
else
{
shape = new Square();
}
如果我尝试从 Rectangle 类调用方法“PrintShape”,我不允许这样做,我怎么能使用不是来自接口的方法?
谢谢!
解决方案
您在这里有一些误解,接口只是您的类被迫实现的一堆方法。你不继承接口,你实现它。
现在到你遇到的问题。由于 IShape 不知道 PrintShape 方法,如果你定义如果你试图调用shape.PrintShape()
它,它将不会编译,因为我上面说的原因。
你怎么能解决这个问题?你有 2 个选项 1 是像这样((Rectangle)shape).PrintShape()
或我建议你实际做的那样投射你的形状,给界面签名,并在正方形中将其实现为 void
推荐阅读
- git - 为什么我在克隆 git 存储库时收到 open ssl 错误?
- node.js - 使用 sendgrid 和 nodeJS 发送电子邮件
- spring-boot - 迁移到 Camel 3 后发布 IBM MQ JMS 标头的问题
- python-3.x - Pytorch:重新缩放后RGB值范围为0-1,如何标准化图像?
- prolog - 如何使用谓词逻辑表示以下语句?
- bash - GIT_ASKPASS 不止回声
- mongodb - 如何使用 $lookup 获取 mongodb 中外部字段的计数?
- angular9 - Angular 9 ng-bootstrap 6.1 模态组件打开方法不起作用
- python - python中具有许多参数的函数
- bash - Bash 计数未注释的行并使用文件名写入输出