c#中重载中的参数解析
本文关键字:参数 重载 | 更新日期: 2023-09-27 18:11:45
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)
{
}