2013-06-22 5 views
-5

Выходной сигнал этой программы: 0 0Вывод программы, что и почему?

Может ли кто-нибудь рассказать мне, почему этот выход идет?

namespace ConsoleApplication 
{ 
    class Sample 
    { 
     int i; 
     Single j; 
     public void SetData(int i, Single j) 
     { 
      i = i; 
      j = j; 
     } 

     public void Display() 
     { 
      Console.WriteLine(i + " " + j); 
     } 
    } 

    class MyProgram 
    { 
     static void Main(string[ ] args) 
     { 
      Sample s1 = new Sample(); 
      s1.SetData(10, 5.4f); 
      s1.Display(); 
     } 
    } 
} 
+0

вы выполнить эту программу раз себя? то, пожалуйста, укажите, какой результат вы наблюдаете. если у вас нет визуальной студии, то смотрите: http://www.compileonline.com/compile_csharp_online.php Покажите нам свой результат, а затем спросите, какая именно проблема у вас с этим выходом. – inquisitive

+4

Хорошо, теперь это просто лениво. Мы не компиляторы ... и, конечно же, вы можете сами понять, что делает программа, следуя ей последовательно. –

+1

Согласен с @Jayram. Запустите программу и убедитесь сами. Чтобы понять это, просто поставьте точку останова и отлаживайте. Visual Studio Express является бесплатным. Получите это отсюда http://www.microsoft.com/visualstudio/eng/downloads#d-express-windows-desktop – unlimit

ответ

1

Вы получаете 0, 0 как результат из-за метода SetData, переменные i и j являются локальными переменными для метода. И из-за этого ваши переменные уровня класса i и j не получают назначений.

public void SetData(int i, Single j) 
    { 
     i = i; 
     j = j; 
    } 

изменить код выше, чтобы:

public void SetData(int i, Single j) 
    { 
     this.i = i; // using this will refer to the class level variables 
     this.j = j; 
    } 

Или вы могли бы назвать локальные переменные по-разному, то локальные переменные не будут скрывать переменные уровня класса.

public void SetData(int a, Single b) 
    { 
     i = a; 
     j = b; 
    } 

Теперь на выходе будет 10 и 5,4

+0

Спасибо. Понял. – user1932288

+0

Если это ответили на ваш вопрос, вы должны отметить его как ответ. (Вы также получаете 2 репутационных очков.) –

1

Выход этой программы будет 0 0. Как и в методе SetData(), вы присваиваете значение тем же переменным, которые входят только в эту область. Следовательно, значение не присваивается переменным класса. Если вы хотите, чтобы присвоить значения переменным класса, то просто измените метод SetData() к

public void SetData(int i, Single j) 
    { 
     this.i = i; 
     this.j = j; 
    } 

Это будет работать.

Я надеюсь, что это объяснение вам поможет. :)