是否可以通过静态方法访问实例变量?

mku*_*kus 7 c# static

在C#中,是否可以通过不同类中的静态方法访问实例变量而无需使用参数传递?

在我们的项目中,我有一个Data access layer有很多静态方法的类.在这些方法中,SqlCommand超时值已经过硬编码.在Dac我们框架中的另一个类()中,有许多实例方法调用这些静态方法.

我不想使用参数传递来编写太多代码.你有没有比参数传递更容易的其他解决方案?

Mar*_*ers 12

是的,可以在不使用参数的情况下从静态方法访问实例变量,但前提是您可以通过声明为static的内容访问它.例:

public class AnotherClass
{
    public int InstanceVariable = 42;
}

public class Program
{
    static AnotherClass x = new AnotherClass(); // This is static.

    static void Main(string[] args)
    {
        Console.WriteLine(x.InstanceVariable);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • +1,但是哦[全局变量的恐怖](http://c2.com/cgi/wiki?GlobalVariablesAreBad)! (5认同)

Jak*_*son 6

当然,您可以将实例作为参数传递给方法.喜欢:

public static void DoSomething(Button b)
{
    b.Text = "foo";
}
Run Code Online (Sandbox Code Playgroud)

但是否则不可能获得任何实例变量.


Jus*_*ner 6

静态方法没有实例可以使用,所以没有.没有参数传递就不可能.

另一个选择可能是使用类的静态实例(Mark的示例在工作中显示此方法),但是,从您的示例中,我不确定这将解决您的问题.

就个人而言,我认为参数传递将是最佳选择.我仍然不确定你为什么要回避它.