2012-04-23 125 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

使用全局变量通常被认为是不好的做法。是什么让你觉得你需要全球范围? – 2012-04-23 17:12:17

+0

这50个变量是什么?你能说得更清楚吗? – Shyju 2012-04-23 17:14:23

+5

不要过早优化。 “我需要使用优化我的记忆”不,你可能不会。你的程序/机器是否因为内存太多而崩溃?你应该根据是什么让程序最容易阅读,理解,管理等等而不是根据它消耗多少内存来确定你的变量,直到你知道它使用的是多于可接受的。内存中的一个额外的int或两个(或50)实际上永远不会成为问题。也就是说,你应该尽可能地避免出于设计原因的全局变量。 – Servy 2012-04-23 17:15:15

回答

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

在下面的情况下,我已经在方法1和方法2中使用变量a和b,所以你们建议在本地声明它们...... public static int Method1(int a1){var a = 15 ; var b = 10; int res = a * b;返回res * a1; } public static int Method2(int a1){var a = 100; var b = 10; int res = a * b;返回res * a1; } – superuser 2012-04-23 17:39:49

+0

是的@David正是如此,但是对于这个例子来说,我把这个放在了.. – superuser 2012-04-23 17:40:46

+1

@YUG:再一次,这个例子是_too_人造的。没有关于这些变量的意义,这些方法做了什么,对象是什么等等。没有任何有意义的上下文,我会在本地范围而不是全局范围方面犯错。在上面的评论中,我没有看到将'a','b'或'res'移到更全局范围的强制理由。仅仅因为方法的实现非常类似,并不意味着它们的内部实现应该暴露在外部。优先考虑对微优化的单一责任。 – David 2012-04-23 17:47:09