在C#中,是否可以在不使用参数传递的情况下通过不同类中的静态方法访问实例变量?是否可以通过静态方法访问实例变量?
在我们的项目中,我有一个Data access layer
类,它有很多静态方法。在这些方法中,SqlCommand
超时值已被硬编码。在我们的框架中的另一个类(Dac
)中有许多实例方法调用这些静态方法。
我不想使用参数传递编码太多。你有没有比参数传递更容易的其他解决方案?
在C#中,是否可以在不使用参数传递的情况下通过不同类中的静态方法访问实例变量?是否可以通过静态方法访问实例变量?
在我们的项目中,我有一个Data access layer
类,它有很多静态方法。在这些方法中,SqlCommand
超时值已被硬编码。在我们的框架中的另一个类(Dac
)中有许多实例方法调用这些静态方法。
我不想使用参数传递编码太多。你有没有比参数传递更容易的其他解决方案?
是的,可以在不使用参数的情况下从静态方法访问实例变量,但前提是您可以通过声明为静态的东西来访问它。例如:
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,但哦[全局变量的恐怖](http://c2.com/cgi/wiki?GlobalVariablesAreBad)! – 2010-07-30 14:02:51
是的...带来童年噩梦的回忆! – 2010-07-30 14:47:51
当然,您可以将一个实例作为参数传递给该方法。像:
public static void DoSomething(Button b)
{
b.Text = "foo";
}
但是,它不可能得到任何实例变量,否则。
感谢杰克,但我改变了这个问题。 – mkus 2010-07-30 13:27:15
不,你不能。
如果你想访问一个实例变量,那么你的方法根据定义不应该是静态的。
访问单例实例属性如何? – 2010-07-30 13:47:02
@Richard:对于单例,你有一个实例,在这种情况下方法不会是静态的。只有获取单例实例的方法是静态的。 – 2010-07-30 14:57:13
是的,只要它有一个范围内的对象的实例。 单身的情况下,或方法本身中创建的对象..
举例来说,一种常见的场景:
public static string UserName
{
return System.Web.HttpContext.Current.User.Identity.Name;
}
静态方法不与任何实例,这样你怎么能指望它来了解相关的哪个实例访问会员? – 2010-07-30 13:38:12
哪个实例? – 2010-07-30 13:38:24