簡體   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