2014-01-17 5 views
1

Я настоящий программист новичков, и я пытаюсь сделать перегрузку, которая будет делиться переменной. В основном, что я хочу сделать, это метод с одной перегрузкой, которая записывает целочисленное значение в переменную внутри нее и другую перегрузку, которая просто возвращает это значение.Обмен переменной между перегрузками метода?

Теперь я попытался сделать это следующим образом:

private int GetQID(int qID) 
    { 
     int ID = qID; 
    }  
private int GetQID() 
    { 
     return ID; 
    } 

Это, к сожалению, не работает, потому что вторая перегрузка не может получить доступ к «ID» переменной первой перегрузки. Есть ли способ, не прибегая к глобальным переменным, что я могу это сделать?

+1

Используйте поля и свойства. –

+0

Я ответил, насколько я могу дать ограниченное описание, но было бы действительно полезно, если бы вы могли дать более практичный пример того, что вы пытаетесь сделать и почему. –

+0

В вашем контексте я считаю, что «свойство» - лучший выбор, сравнимый с использованием 2 отдельных методов. 'get' будет действовать как' GetQID() ', а' set' будет действовать как 'GetQID (int qID)'. Вы также можете выполнить некоторое логическое внутреннее свойство до фактического значения set/return. –

ответ

5

Нет, локальные переменные являются чисто локальными для рассматриваемого метода. Не совсем ясно, чего вы пытаетесь достичь, но если вы хотите, чтобы какое-либо состояние сохранялось между вызовами метода, вам понадобится поле и, вероятно, выставить его как свойство.

private int id; 
public int Id 
{ 
    set 
    { 
     // Perform some validation? 
     id = value; 
    } 
    get { return id; } 
} 

Если вы просто хотите, свойство, которое опирается на поле без каких-либо другой логики, то автоматически реализованы свойства полезны:

public int Id { get; set; } 
+0

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

+0

@ user3205941: Предполагая, что вы имели в виду «точно то же, что и в первом примере», да. См. Http://msdn.microsoft.com/en-us/library/bb384054.aspx –

0

Нет, вы не можете получить доступ к локальным переменным.

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

Относительно global variables are evil, лучше спросите своего друга, что он имеет в виду (он прав, но только в определенной степени). Поскольку вы должны использовать свойства и поля во многих классах, и любой класс может внезапно стать глобально доступным, если предоставить его экземпляр для всех (или если это статический класс со статическими свойствами/полями, singleton).

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

+0

Ну, он был не очень конкретным, он только что упомянул, что использование глобальных переменных не было хорошим, потому что они не являются «безопасными», и вы не будете создавать «безопасную» программу, если вы их используете. По-видимому, в его школе им не разрешено использовать глобальные переменные для своих заданий программирования. –

+0

* Не защищены * это то, к чему они могут быть доступны из любого места, поэтому у вас есть десятки мест, где вы можете что-то сломать. В свойстве вы можете иметь * private setter * или * protected setter *, чтобы ограничить область доступа. Для свойств * public * вы можете ограничить область применения **, не предоставляя экземпляр класса ** всем, но только тем, кому вы доверяете. – Sinatr

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