Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将方法从一个类调用到另一个类?_C#_Asp.net - Fatal编程技术网

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正在正常工作,谢谢你。