从一个类调用方法到另一个类?

时间:2016-08-20 14:02:11

标签: c# asp.net

我有两节课。一个包含数据和行为。另一个是输入和显示数据。当我从另一个类中调用一个类的方法来显示结果时,它返回零。

任何帮助......谢谢

数据和行为:

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();

    }

2 个答案:

答案 0 :(得分:2)

以下代码:

CalculateArea newCal1 = new CalculateArea(radiusX);

调用以下构造函数:

public CalculateArea(int height1) 
{
    height = height1;
}

因为radiusX是INTEGER ...

因此,该值存储在高度中,而不是半径中。 因此,当您调用方法来计算圆的面积时,它会使用半径计算,即为0.0。

CalculateCylinderArea也使用半径和高度,但构造函数只使用两个参数,高度和宽度。 因此,在方法3中,它也失败",因为半径和宽度是0.0

矩形的计算有效。

要解决圆圈问题,您需要将raiusX变量更改为double。

要解决气缸问题,例如,您可以更改例程以使用长度和宽度而不是半径和高度。

但是作为旁注,还有更好的方法来做你想做的事情:)

答案 1 :(得分:0)

除了@Jauch的答案之外,我还想提供一些额外的信息。

如果类型(类或结构)中的多个方法具有相同的名称,则称它们被重载。只有在它们具有不同的形式参数列表时才允许这样做。参数名称无关紧要;只有他们的数量和类型。返回类型也无关紧要。

您的问题与Overload resolution有关。这就是C#为了找出必须调用哪个重载版本所做的事情。重要的是要理解这是在编译时发生的,而不是在运行时发生的。这意味着传递的具体值无关紧要,因为它们在编译时是未知的。只有实际参数的类型才有意义。

请按照上面的链接获取规范,但Jon Skeet的文章可能更易于理解:C# in Depth: Overloading