【问题标题】:How can I get/set member variables from inside a static function?如何从静态函数内部获取/设置成员变量?
【发布时间】:2011-03-07 07:32:38
【问题描述】:

我正在尝试做这样的事情:

string strFirstName;
string strSurname;

public static bool MyItem(string FirstName, string Surname)
{
    strFirstName = FirstName; //won't work obviously
    strSurname = Surname;
}

private MyPrivateCode()
{
    string MyPrivateFirstName = strFirstName;
    string MyPrivateSurname = strSurname;
}

显然,它不会起作用。我需要“MyItem”是公共静态的,因为我需要能够从另一个类访问它。我正在用 C# 编写代码。

【问题讨论】:

  • 我认为您可能误用了static。你想完成什么?
  • 又是一个“红鲱鱼”的实例!!确定你在这里追的是一个错误的问题,请在这里提出“真正的”问题/用例,而不是你认为是解决方案的想法!!。

标签: c# .net static-members oop


【解决方案1】:

静态方法只能引用静态成员。将不同数据与类的不同实例关联的唯一方法是使用非静态成员。静态成员为特定类的所有个实例共享相同的数据。

解决方案是向另一个类(您需要能够从中访问存储在第一个类中的数据的那个)类的一个实例,并访问您需要的数据通过那个实例。

如果没有更多关于您到底想要完成什么的信息,很难更具体。

【讨论】:

    【解决方案2】:

    MyItem 是静态的。所以你不能访问对象的实例变量。

    静态方法只能访问其他静态变量。
    这样做的逻辑是,在运行时只有 1 个静态方法,但可能有 1000 个对象实例,那么你怎么知道要使用谁的变量呢?

    static string strFirstName;
    static string strSurname;
    
    public static bool MyItem(string FirstName, string Surname)
    {
        strFirstName = FirstName; //won't work obviously
        strSurname = Surname;
    }
    

    【讨论】:

      【解决方案3】:

      由于类的每个实例都有自己的strFirstNamestrSurname,因此从静态方法内部设置它是没有意义的:不清楚应该设置哪个。

      你需要写

      static string strFirstName;
      static string stdSurname;
      

      否则

      public bool MyItem(string FirstName, string Surname)
      

      即使变量静态(在这种情况下通常没有意义)或使方法非静态(您也可以从“另一个类”调用它,但您需要提供一个实例)

      PS:还要注意,MyItem 必须返回一个布尔值才能正确编译。

      【讨论】:

        猜你喜欢
        • 2020-07-17
        • 1970-01-01
        • 2013-02-08
        • 2011-02-07
        • 2011-09-20
        • 2016-07-13
        • 2011-09-07
        相关资源
        最近更新 更多