大佬教程收集整理的这篇文章主要介绍了摘要 - 覆盖方法返回“无法将 void 转换为 bool”的错误,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试编写一个代码,在学习抽象类的过程中计算形状的周长。所以我创建了一个抽象基类“figure”并用形状名称派生它。我使用一种方法用不同的实现覆盖它。 PS:我知道返回方法会更容易,我可以创建一个像“int sum”这样的变量来存储和打印,但我想使用我给出的代码中的方式来掌握问题。 但是,从昨天开始就看不到哪里不对劲了。 编辑:“无法显式将 voID 转换为 bool”错误位于第 16 行和第 17 行,它们是 图矩形 = new Rectangle(5,6); 图三角形 = new Triangle(4,8,3);
using System.Collections.Generic;
using System.linq;
using System.Text;
using System.Threading.Tasks;
namespace CSHARP3
{
class Program
{
static voID Main(String[] args)
{
figure rectangle = new Rectangle(5,6);
figure triangle = new Triangle(4,3);
Console.Writeline(rectangle.Perimeter());
Console.Writeline(triangle.Perimeter());
}
}
abstract class figure
{
//define abstract method Perimeter
public abstract voID Perimeter();
}
class Rectangle : figure
{
public int wIDth;
public int height;
public Rectangle(int wIDth,int height)
{
this.wIDth = wIDth;
this.height = height;
}
//overrIDe Perimeter method for rectangle
public overrIDe voID Perimeter()
{
Console.Writeline(2 * (wIDth + height));
}
}
class Triangle : figure
{
public int sIDe1;
public int sIDe2;
public int sIDe3;
public Triangle(int s1,int s2,int s3)
{
this.side1 = s1;
this.side2 = s2;
this.side3 = s3;
}
//overrIDe Perimeter method for triangle
public overrIDe voID Perimeter()
{
Console.Writeline(sIDe1 + sIDe2 + sIDe3);
}
}
}
在您的行 Console.WriteLine(rectangle.Perimeter());
中,您正在对一个不返回任何内容的方法调用 Console.WriteLine。事实上, Perimeter() 本身正在做一个 Console.WriteLine!
最好的解决方法是从该方法返回一个值:
abstract class Figure
{
public abstract int Perimeter();
}
当然,通过用 return
替换 Console.WriteLine 来修复实际实现。
如果您真的希望该方法自行打印,则只需调用该方法:rectangle.Perimeter();
不需要额外的 Console.WriteLine,因为该方法已经处理了它(无论如何也没有什么可打印的) ).
至于为什么编译器的错误消息(CS1503)提到“bool”:Console.WriteLine 有多个重载,但没有一个适合。编译器选择一个(显然带有 bool
参数)并抱怨您的参数(类型 void)不合适。
以上是大佬教程为你收集整理的摘要 - 覆盖方法返回“无法将 void 转换为 bool”的错误全部内容,希望文章能够帮你解决摘要 - 覆盖方法返回“无法将 void 转换为 bool”的错误所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。