[英]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.