如何从一个类中访问另一个类的变量值?

5
我希望能从一个类访问另一个类的字符串。 我已使用以下属性方法 -
Myclass.cs

public class MyClass
{
    private string _user;
    public string user
    { get { return this._user; } set { this._user = value; } }

}

consumption.aspx.cs

我将在函数中为用户赋值。
MyClass m = new MyClass();
m.user = "abc"

现在,当我尝试在另一个函数中使用此值时,该值已经被分配。
RawDal.cs

MyClass m = new MyClass();
string x = m.user;

我收到了一个空值... 该怎么做?


4
你需要使用相同的 m 实例,否则你可以将 User 设为静态。 - Jens Kloster
4
您正在创建两个独立的MyClass实例。如果您希望持久化user,请尝试使用Singleton模式。 - Kamil Budziewski
一旦你创建了MyClass的另一个实例,它将从头开始初始化,因此你无法在任何其他地方访问先前使用该类的实例所做的任何事情。你必须选择会话(如果是asp.net)或Singleton,正如@wudzik所说。 - Jibran Khan
2个回答

13

正如评论中已经提到的那样,您正在创建两个独立的 MyClass 实例,这简化后会得到以下结果:

int a;
a = 3;
int b;
Console.WriteLine("a: " + b); //<-- here it should be obvious why b is not 3

您可以通过以下三种方式解决此问题:

1) 对于第二次调用,可以使用相同的 MyClass 实例,但在这种情况下,您需要处于相同的作用域或将实例传递给新作用域。

2) 将属性/成员设置为静态:

public class MyClass
{
    public static string User { get; set; } //the "static" is the important keyword, I just used the alternative property declaration to keep it shorter
}

然后你可以通过 MyClass.User 访问相同的 User 值,这样可以在任何地方访问。

3)使用单例模式:

public class MyClass
{
    private static MyClass instance = null;
    public static MyClass Instance 
    {
        get
        {
            if(instance == null)
                instance = new MyClass();
            return instance;
        }
    }

    public string User { get; set; }
}

然后您可以通过 MyClass.Instance.User 访问它。

可能还有其他解决方案,但这些是常见的。


使用 MyClass.Instance.Instance.Instance.Instance.Instance.Instance.Instance.Instance.Instance.Instance.Instance.Instance.User 能得到相同的结果吗? - T.Todua
@T.Todua 不行,因为你不能通过实例访问静态属性。所以 MyClass.Instance.Instance 已经无法编译,会出现 Member 'UserQuery.MyClass.Instance' cannot be accessed with an instance reference; qualify it with a type name instead 的错误提示。 - Christoph Fink

5

您没有使用相同的实例。尝试:

public class MyClass
{
    private string _user;
    public string user
    { get { return this._user; } set { this._user = value; } }

}

public string YourFunction()
{
   MyClass m = new MyClass();
   m.user = "abc"
   return m.user;

}

如果您只想返回一个字符串,请尝试以下方法:
string x = YourFunction();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接