程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了摘要 - 覆盖方法返回“无法将 void 转换为 bool”的错误大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决摘要 - 覆盖方法返回“无法将 void 转换为 bool”的错误?

开发过程中遇到摘要 - 覆盖方法返回“无法将 void 转换为 bool”的错误的问题如何解决?下面主要结合日常开发的经验,给出你关于摘要 - 覆盖方法返回“无法将 void 转换为 bool”的错误的解决方法建议,希望对你解决摘要 - 覆盖方法返回“无法将 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,请注明来意。