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;
    }
    }
}

这是我的代码重载,它给我错误当给它的参数在我的主方法…

c#中重载中的参数解析

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

你声明了两个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) 
{
}