C# 将方法从一个类调用到另一个类?
我有两节课。一个包含数据和行为。另一个只是用于输入和显示数据。当我从一个类调用另一个类的方法来显示结果时,它返回零 需要帮忙吗?谢谢 数据和行为:C# 将方法从一个类调用到另一个类?,c#,asp.net,C#,Asp.net,我有两节课。一个包含数据和行为。另一个只是用于输入和显示数据。当我从一个类调用另一个类的方法来显示结果时,它返回零 需要帮忙吗?谢谢 数据和行为: class CalculateArea { private const double PI = 3.14; private double cirArea; private double recArea; private double cilArea; private double radius; pri
class CalculateArea
{
private const double PI = 3.14;
private double cirArea;
private double recArea;
private double cilArea;
private double radius;
private double length, width;
private int height;
// Constructors
public CalculateArea(double radius1)
{
radius = radius1;
}
public double CalculateCircleArea()
{
cirArea = (PI * (radius * radius));
return cirArea;
}
public CalculateArea(int height1)
{
height = height1;
}
public CalculateArea(double lenght1 , double width1)
{
length = lenght1;
width = width1;
}
//public CalculateArea()
//{
// TODO: Complete member initialization
//}
// methods
//
public double CalculateRectangleArea()
{
recArea = (length * width);
return recArea;
}
//
public double CalculateCylinderArea()
{
cilArea = (PI * (radius * radius) * height);
return cilArea;
}
}
输入和显示:
class Program
{
static void Main(string[] args)
{
string number;
Console.WriteLine("Which figure do you want to see calculated select a number");
Console.WriteLine("Circle : 1");
Console.WriteLine("Rectangle : 2");
Console.WriteLine("Cylinder : 3");
number= Console.ReadLine();
int numb=Convert.ToInt32(number);
if (numb == 1)
{
Console.WriteLine("Enter the radius for circle");
string rad;
rad = Console.ReadLine();
int radiusX = Convert.ToInt32(rad);
CalculateArea newCal1 = new CalculateArea(radiusX);
Console.WriteLine("The result of calculation is {0}", newCal1.CalculateCircleArea());
}
else if(numb == 2)
{
Console.WriteLine("Enter the length ");
number = Console.ReadLine();
double lenght;
lenght = Convert.ToDouble(number);
Console.WriteLine("Enter the width ");
number = Console.ReadLine();
double width;
width = Convert.ToDouble(number);
CalculateArea newCal2=new CalculateArea(lenght , width);
Console.WriteLine("The result of calculation is {0}" , newCal2.CalculateRectangleArea());
}
else if (numb == 3)
{
Console.WriteLine("Enter the height ");
number = Console.ReadLine();
int height;
height = Convert.ToInt32(number);
Console.WriteLine("Enter the radius");
number = Console.ReadLine();
int radius;
radius = Convert.ToInt32(number);
CalculateArea newCal3 = new CalculateArea(height, radius);
Console.WriteLine("The reslut of calculation is {0}", newCal3.CalculateCylinderArea());
}
else
{
Console.WriteLine("There is no any calculation number check the information and try again");
}
Console.ReadLine();
}
以下代码:
CalculateArea newCal1 = new CalculateArea(radiusX);
正在调用以下构造函数:
public CalculateArea(int height1)
{
height = height1;
}
因为radiusX是一个整数
因此,该值存储在高度中,而不是半径中。
因此,当您调用该方法来计算圆的面积时,它会使用半径进行计算,即仍然为0.0
CalculateCylinderArea也使用半径和高度,但构造函数只使用两个参数:高度和宽度。
因此,在方法3中,它也“失败”,因为半径和宽度为0.0
矩形的计算是可行的
要解决圆的问题,需要将raiusX变量更改为double
例如,要解决圆柱体的问题,可以将例程更改为使用长度和宽度,而不是半径和高度
但是作为补充说明,还有更好的方法来做你想做的事情:)除了@Jauch的回答之外,我想提供一些额外的信息 如果一个类型(类或结构)中的多个方法具有相同的名称,则称它们为重载。仅当它们具有不同的形式参数列表时才允许这样做。参数的名称无关紧要;只有它们的数量和类型。返回类型也不重要 你的问题与我有关。这就是C#所做的,以确定必须调用哪个重载版本。重要的是要理解这是在编译时发生的,而不是在运行时。这意味着传递的具体值无关紧要,因为它们在编译时是未知的。只有实际参数的类型才重要
请按照上面的链接获取规范,但Jon Skeet的文章可能更容易理解:。您有什么困难?我想返回计算结果,但每次它返回0计算结果时,请查看我的更新答案。只有方法1和3失败。方法2正在正常工作,谢谢你。