繁体   English   中英

在 C# 中解析重载中的参数

[英]parsing arguments in overloading in c#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace midq6
{
    class Program
    {
        const double pi=3.142;
        static void Main(string[] args)
        {
            Program test = new Program();
            test.area(2.0,2.8,4.0,4.9,5.0,3.8);        
        }

    public double area(double s) 
    {
        double area = s * s;
        Console.WriteLine("Area of a square: "+ area);
        return area;
    }
    public double area(double l, double w) 
    {
        double area = l * w;
        Console.WriteLine("Area of a rectengle: "+ area);
        return area;
    }
    public double area(double h,double b) 
    {
        double area = 0.5 * h * b;
        Console.WriteLine("Area of a triangle: " + area);
        return area;
    }
    public double area(double r) 
    {
        double area = pi * r * r;
        return area;
    }

    }
}

这是我的重载代码,当在我的主要方法中给它参数时它给了我错误......请大家帮忙

重载的方法必须有唯一的方法签名,特别是每个重载必须有不同的参数。

您正在声明两个area(double)方法和两个area(double,double)方法。 这是无效的重载,因此代码将无法编译。

如果代码确实编译并且我调用了area(4.0) ,那么应该调用矩形和圆形方法中的哪一个? 编译器和运行时无法知道您指的是哪一个。 这就是为什么对重载有签名限制的原因。

不过,您的方法名称确实不清楚,这是重载的错误用法。 调用方法AreaOfSquareAreaOfTriangle等。这将解决您的问题并使您的代码更具可读性。

你有两个相同的double area(double, double); . 你不能有相同的重载。 你需要重新设计你的班级。

public double area(double s) {}

public double area(double r) {}

对于编译器来说是相同的,因此不允许作为重载。 例如,更改您的函数名称

public double SquareArea(double s) {}

public double CircleArea(double r) {}

此外,您还没有定义任何需要 6 个参数的方法,但您正在调用

test.area(2.0,2.8,4.0,4.9,5.0,3.8);

这是不允许的。

如果不想在 C# 中使用可变参数,请使用params关键字。 例如

public double Area(params double[] args) {}

此外,您传递了 6 个参数,但没有采用 6 个参数的方法。 如果您想在这一点上灵活,请声明一个采用参数的方法:

public double area(params double[] s) 
{

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM