2014-10-30 64 views
0

我想写一个程序,有两个类,并从一个调用2个变量到另一个,但我有两个错误,说''Area.Circle'不包含定义'result1'“和”'Area.Circle'不包含'result2''的定义。我怎么解决这个问题?调用变量从不同的类c#

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

     } 
    } 
} 
+1

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

回答

2

这是因为result1result2局部变量Area方法内。你必须让他们public并在一流水平(考虑把它们变成Properties也许):

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

有一点需要注意的是,如果你保持声明为static方法Area,你将无法在调用函数内部使用实例成员

4

问题在于您在Area()方法的范围内定义了result1result2。在课堂上宣布他们,公开和静态,他们将被访问。

由于方法Area()是静态的,变量也必须是静态的才能从其中进行访问。你正在从另一个类访问静态变量,所以这应该工作。

+0

然后他们将无法通过'Area'方法访问。 – Servy 2014-10-30 14:56:55

+0

他们会,如果他们也是静态的,或者如果Area方法不是静态的,并且因为他调用了Circle.result1和Circle.result2,他们应该是 – 2014-10-30 15:00:25

+0

1)你没有提到2)那仍然是*糟糕的*设计。 – Servy 2014-10-30 15:01:10

0

当你有一个计算值的方法时,它需要返回它计算给调用者的值。将它们存储在局部变量中不会将它们暴露给方法的调用者。在这种情况下,由于您有两个要返回的值,因此您需要将这两个值封装在另一个可以返回的类中。你可以创建一个自定义类,或者简单地使用一个通用类,如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然后你可以存储在一个变量和访问这些数据以后的方法的结果。

+0

静态方法主要用于立即返回结果,所以这个答案在我看来是最适用的。 OP使用'新的Circle()',也许他需要阅读更多关于'静态'用法。如果'Area()'不是'static',那么使用'new',调用方法并获得结果作为属性会更好。 – Sinatr 2014-10-30 15:40:30