2014-10-30 4 views
0

Я пытаюсь написать программу, которая имеет два класса, и вызовет две переменные от одной к другой, но я получил две ошибки, которые говорят «Area.Circle» не содержит определения для 'result1' "and" '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 внутри метода. Это означает, что эти переменные являются локальными для этого метода и не могут вызываться за его пределами. Если вы хотите сохранить эти переменные вокруг, вам нужно объявить их на уровне класса (внутри круга, но за пределами области). –

ответ

2

Это потому, что result1 и result2 являются локальные переменные внутри вашего метода Area. Вы должны сделать их public и на уровне класса (рассмотреть превращение их в Properties возможно):

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

Единственное, что следует отметить, что если вы держите Area объявленную как метод static, вы не сможете используйте членов экземпляра внутри вызывающей функции.

4

Проблема в том, что вы определяете result1 и result2 в рамках метода Area(). Объявите их на уровне класса, общедоступным и статическим, и они будут доступны.

Поскольку метод Area() является статическим, переменные также должны быть статическими, чтобы их можно было получить изнутри. Вы получаете доступ к переменным как статические из вашего другого класса, хотя это должно работать.

+0

Тогда они не будут доступны в методе 'Area'. – Servy

+0

Они будут, если они также статичны или если метод Area не является статичным, и поскольку он вызывает Circle.result1 и Circle.result2, они должны быть –

+0

1) Вы не упомянули об этом 2) Это все равно будет * ужасным * дизайн. – Servy

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 использует 'new Circle()', возможно, ему нужно больше узнать об использовании 'static'. Если 'Area()' будет не 'static', то использование' new', метод вызова и получение результатов по мере того, как свойства выглядят лучше. – Sinatr

Смежные вопросы