全局访问与局部变量

时间:2010-03-24 15:09:18

标签: c#

我有两个对象,我将主要在单个类中使用。我将在开始时初始化它们并在程序的整个生命周期中使用它们。现在,我的问题是,如果我应该将它们创建为全局变量并在代码中的任何位置访问它们(在单个类的一侧),或者我应该将它们创建为局部变量并将它们作为参数传递给其他函数。我只是想看看什么是最好的编程实践。

我正在使用C#。

感谢。

7 个答案:

答案 0 :(得分:5)

一般来说,你应该避免使用全局变量。如果它是实用的,我建议将它们保留为本地并将它们作为参数传递给您的函数。

正如Josh指出的那样,如果这些变量在类的单个实例中使用,那么您应该将它们设为私有(或受保护)成员上课并完成它。当然,那么它们只能作为参数传递给具有相同访问级别的其他方法(IE,私有)。

或者,您可以考虑使用Singleton Design Pattern,这对于使用全局变量更为清晰(并且更可取)。

答案 1 :(得分:2)

如果对象的范围是它们被实例化的类的生命周期,那么它们应该是私有成员变量。

如果他们自己不维护状态,那么你应该把它们变成静态类。

你应该仍然将它们作为变量传递,或者至少创建属性访问器以获得支持字段。这样您就可以在不破坏代码的情况下更改实现细节。

在考虑这些事情时,

SOLID design principles是一个很好的起点。

答案 2 :(得分:2)

  

我有两个对象   主要用于单班内。一世   将在开始时初始化它们   并在整个生命周期中使用它们   该计划。

这听起来像是使用private static readonly变量的最佳时机。这些可以在它们的声明中初始化,或者你可以创建一个静态构造函数来初始化它们。

您只在一个类中引用这些对象这一事实是关键点。如果在单个类之外需要这些对象,还有其他更好的方法可以做。

答案 3 :(得分:0)

如果对象的每个实例都相同,那么

static const double PI = 3.14158;

答案 4 :(得分:0)

您通常应该使用访问器方法(例如getter和setter)并将内部变量保密。这样,您的类之外的其余代码不依赖于您的实际变量。

请参阅this教程。

答案 5 :(得分:0)

如果你的类依赖于这两个对象,那么它们应该是类本身的成员。像这样的东西(其中A是你正在谈论的类,B是你初始化的对象之一:

public class A
{
    private B _b;

    public A(B b)
    {
        _b = b;
    }

    public void DoSomething()
    {
        //do something with _b;
    }

    private void DoSomethingElse()
    {
        //do something else with _b;
    }
}

在此示例中,A依赖于B(因此您将B的实例传递给A的构造函数或通过某个依赖注入框架)。类A上的每个方法都需要传递类型为B的参数,这没有多大意义。

答案 6 :(得分:0)

我认为在这种情况下你应该问什么更有意义。 2个对象和新类之间是否存在某种关系。此外,他们在课堂上多久使用一次。

通常,如果只有几个方法使用这些对象,则传递它们,将它们实例化为类级变量(可能使用私有静态只读,如Jefferey建议的那样)并在类中使用它们。让代码更具可读性应该是你的目标。