[英]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)
,那么应该调用矩形和圆形方法中的哪一个? 编译器和运行时无法知道您指的是哪一个。 这就是为什么对重载有签名限制的原因。
不过,您的方法名称确实不清楚,这是重载的错误用法。 调用方法AreaOfSquare
、 AreaOfTriangle
等。这将解决您的问题并使您的代码更具可读性。
你有两个相同的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.