【问题标题】:Calling variables from different classes c#从不同的类调用变量c#
【发布时间】:2014-12-26 16:15:38
【问题描述】:

我正在尝试编写一个有两个类的程序,并从一个到另一个调用 2 个变量,但我得到两个错误,说“'Area.Circle' 不包含'result1 的定义'" 和 "'Area.Circle' 不包含 'result2' 的定义"。我该如何解决这个问题?

using System;

namespace Area
{
    class Circle
    {
        public static void Area()
        {
            Console.WriteLine("Enter the radius of the first circle:   ");
            int r1 = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Enter the radius of the second circle:   ");
            int r2 = Convert.ToInt32(Console.ReadLine());
            double pi = Math.PI;
            double result1 = pi * r1 * r1;
            double result2 = pi * r2 * r2;
            Console.WriteLine("The area of the first circle is {0}\nThe area of the second circle is {1}\n", result1, result2);
        }
    }

    class Minimum
    {
        static void Main(string[] args)
        {
            Circle.Area();
            Circle one = new Circle();

            double min = Math.Min(Circle.result1, Circle.result2);
            Console.WriteLine("min");

        }
    }
}

【问题讨论】:

  • 您在方法中定义了 result1 和 result2。这意味着这些变量是该方法的本地变量,不能在其外部调用。如果你想保留这些变量,你需要在类级别(在 Circle 内部但在 Area 外部)声明它们。

标签: c# .net class oop variables


【解决方案1】:

问题是您在Area() 方法的范围内定义了result1result2。在类级别声明它们,公共的和静态的,它们将是可访问的。

由于方法Area() 是静态的,因此变量也必须是静态的才能从其中访问。但是,您正在从其他类以静态方式访问变量,因此应该可以。

【讨论】:

  • 那么他们将无法在Area 方法中访问。
  • 如果它们也是静态的或者如果 Area 方法不是静态的,并且由于他正在调用 Circle.result1 和 Circle.result2,它们应该是
  • 1) 你没有提到那个 2) 那仍然是糟糕的设计。
【解决方案2】:

这是因为result1result2Area 方法中的局部变量。您必须将它们设为public 并在班级级别(考虑将它们设为Properties 或许):

class Circle
{
    public double Result1 { get; set; }
    public double Result2 { get; set; }
}

需要注意的一点是,如果您将 Area 声明为 static 方法,您将无法在调用函数中使用 instance members

【讨论】:

    【解决方案3】:

    当您有一个计算值的方法时,它需要将计算出的值返回给调用者。将它们存储在局部变量中并不会将它们暴露给方法的调用者。在这种情况下,由于您有两个值要返回,因此您需要将这两个值封装在另一个可以返回的类中。您可以创建一个自定义类,或者简单地使用一个通用类,例如Tuple

    public static Tuple<double, double> Area()
    {
        Console.WriteLine("Enter the radius of the first circle:   ");
        int r1 = Convert.ToInt32(Console.ReadLine());
        Console.WriteLine("Enter the radius of the second circle:   ");
        int r2 = Convert.ToInt32(Console.ReadLine());
        double pi = Math.PI;
        double result1 = pi * r1 * r1;
        double result2 = pi * r2 * r2;
        Console.WriteLine("The area of the first circle is {0}\nThe area of the second circle is {1}\n", result1, result2);
        return Tuple.Create(result1, result2);
    }
    

    当您调用Area 时,您可以将方法的结果存储在一个变量中,并在以后访问该数据。

    【讨论】:

    • 静态方法主要用于立即返回结果,所以我认为这个答案最适用。 OP 使用new Circle(),也许他需要阅读更多关于static 用法的信息。如果Area() 不是static,那么使用new,调用方法并将结果作为属性看起来会更好。
    猜你喜欢
    • 2014-12-28
    • 2015-08-01
    • 1970-01-01
    • 2019-11-26
    • 2021-02-24
    • 1970-01-01
    • 2020-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多