2014-10-30 66 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