2012-04-23 9 views
-2

У меня есть сомнения относительно управления памятью в объявлении переменных.Как объявить глобальные переменные?

В моем классе у меня около 20 методов, я использую около 50 переменных из своего класса.

Я объявлял все переменные глобально в начале класса.

Правильно ли это делается? или какой из них лучше ... Использование структуры или чего-то еще ???

Ниже представлен основной пример, мне нужно использовать оптимизацию моей памяти.

class Program 
    { 
     static int a, b, c, d;   //----> Here am declaring , i need any other way 
     static void Main(string[] args) 
     { 
      a = 10; 
      b = 20; 
      c = 30; 
      d = 40; 

      int result = add(a, b, c, d); 
      Console.WriteLine(result); 
      Console.ReadLine(); 
     } 
     public static int add(int w, int x, int y, int z) 
     { 
      return w + x + y + z; 
     } 
    } 
+8

Использование глобальных переменных считается плохой практикой в ​​целом. Что заставляет вас думать, что вам нужен глобальный охват? –

+0

Для чего эти 50 переменных? Можете ли вы сказать более четко? – Shyju

+5

Не следует преждевременно оптимизировать. «Мне нужно использовать оптимизацию моей памяти» Нет, скорее всего, вы этого не делаете. Сбой вашей программы/машины, поскольку она использует слишком много памяти? Вы должны определить свои переменные на основе того, что делает программу проще читать, понимать, управлять и т. Д., А не на основе того, сколько памяти она потребляет, пока вы не узнаете, что она использует больше, чем это приемлемо. Дополнительный int или два (или 50) в памяти практически никогда не будут проблемой. Тем не менее, вы должны избегать глобальных переменных по соображениям дизайна, где это возможно. – Servy

ответ

5

переменного уровень класса используется только в рамках одного метода, объявите их только в рамках этого метода:

static void Main(string[] args) 
{ 
    var a = 10; 
    var b = 20; 
    var c = 30; 
    var d = 40; 

    int result = add(a, b, c, d); 
    Console.WriteLine(result); 
    Console.ReadLine(); 
} 

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

Есть ли причина, по которой вы пытаетесь оптимизировать расход ресурсов вашего кода? Скорее всего, особенно в случае, если это просто, компилятор отлично справляется с этим. Если вы не видите фактические проблемы, не делайте преждевременной оптимизации. Чаще всего это приводит к неуправляемому коду.

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

+0

В приведенном ниже случае я использовал переменные a и b в методе 1 и методе2, поэтому люди предлагают, чтобы объявить их локально ....... public static int Method1 (int a1) {var a = 15 ; var b = 10; int res = a * b; return res * a1; } public static int Method2 (int a1) {var a = 100; var b = 10; int res = a * b; return res * a1; } – superuser

+0

Да @David точно, но для примера точки зрения я ставлю это. – superuser

+1

@YUG: Опять же, пример _too_ изобрел. Существует неопределенный контекст о том, что означают эти переменные, что делают эти методы, что такое объект и т. Д. Без какого-либо значимого контекста я бы ошибался на стороне локальной области, а не глобальной области. В приведенном выше комментарии я не вижу веских причин переместить 'a',' b' или 'res' в более глобальную область. Просто потому, что реализация метода делает очень похожие вещи, не означает, что их внутренние реализации должны быть открыты снаружи. Предпочитайте единую ответственность за микрооптимизацию. – David