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

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

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

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

是的,可以在不使用参数的情况下从静态方法访问实例变量,但前提是您可以通过声明为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); } } 

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

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

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

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

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

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

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

举一个常见的场景:

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

不,你不能。

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