【问题标题】:Is it possible to access an instance variable via a static method?是否可以通过静态方法访问实例变量?
【发布时间】:2010-07-30 13:24:29
【问题描述】:

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

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

我不想使用参数传递编写太多代码。有没有比传参更简单的解决方案?

【问题讨论】:

  • 一个静态方法不与任何实例相关联,那么您如何期望它知道访问哪个实例的成员?

标签: c# static


【解决方案1】:

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

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);
    }
}

【讨论】:

【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

    • 编辑归结为“我不想”,这不是一个好的技术原因。替代方案真的很糟糕,如果不是不可能的话。
    【解决方案4】:

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

    以一个常见的场景为例:

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

    【讨论】:

      【解决方案5】:

      不,你不能。

      如果你想访问一个实例变量,那么你的方法定义不应该是静态的。

      【讨论】:

      • 访问单例的实例属性怎么样?
      • @Richard:对于单例,您有一个实例,在这种情况下方法不会是静态的。只有获取单例实例的方法是静态的。
      猜你喜欢
      • 2023-03-21
      • 2016-11-10
      • 2021-11-24
      • 1970-01-01
      • 2018-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多