在C#中,是否可以通过不同类中的静态方法访问实例变量而不使用参数传递?
在我们的项目中,我有一个Data access layer
类,它有很多静态方法。在这些方法中,SqlCommand
超时值已经过硬编码。在我们框架中的另一个类(Dac
)中,有许多实例方法调用这些静态方法。
我不想使用参数传递来编写太多代码。您是否有比参数传递更容易的其他解决方案?
答案 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)
不,你不能。
如果要访问实例变量,那么根据定义,您的方法不应该是静态的。