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

时间:2010-07-30 13:24:30

标签: c# static

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

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

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

5 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分:6)

当然,您可以将实例作为参数传递给方法。像:

public static void DoSomething(Button b)
{
    b.Text = "foo";
}

但是否则无法获得任何实例变量。

答案 2 :(得分:6)

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

你的另一个选择可能是使用类的静态实例(Mark的例子在工作中显示了这个方法),但是,从你的例子来看,我不确定这会解决你的问题。

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

答案 3 :(得分:2)

是的,只要它在范围内有一个对象的实例就可以。 例如单身人士,或在方法本身内创建的对象。

以一个常见的场景为例:

public static string UserName
{
   return System.Web.HttpContext.Current.User.Identity.Name;
}

答案 4 :(得分:1)

不,你不能。

如果要访问实例变量,那么根据定义,您的方法不应该是静态的。