2017-08-10 109 views
-2

你好我有很多变量,正如我在下面提到的,但是当我改变一个变量的值时,这个变化不会被使用这个变量的变量调整。C#不断更新变量

class PublicVariable 
{ 
    public static string ActiveUser = UserInfo.Username; 
    public static string ActiveUserPath = [email protected]"{Application.StartupPath}\{ActiveUser}"; 
    public static string ActiveUserImg = [email protected]"{ActiveUserPath}\User.png"; 
} 
class UserInfo 
{ 
    public static string Username = "-1064548"; //Working 
} 
class Starting 
{ 
    public void Login(string Username, string Pwd) 
    { 
     //After the user logged in. 
     UserInfo.Username = "BruceWayne"; //Working 
     /* Showing -1064548 = */ MessageBox.Show(PublicVariable.ActiveUser.ToString()); //Not Working. 
    } 
} 

为了简化代码,ActiveUser就是一个例子。 该代码序列就是一个例子。目标是从数据库中获取数据一次。

+1

将** PublicVariable.ActiveUser **变量转换为像这样的属性:'public static string ActiveUser => UserInfo.Username;' –

+4

为什么要这样做。您**将'UserInfo.Username'的**值**分配给'ActiveUser'字段。当您稍后更改'UserInfo.Username'中的值时,为什么'ActiveUser'中的值应该改变? –

+0

你永远不会改变PublicVariable.ActiveUser的值。当你在类中定义它时,你并没有创建一个指针 - 你正在给它赋值。 –

回答

0

为了解决你的问题,我建议在这里使用属性。这应该是这样的,那么:

class PublicVariable 
{ 
    public static string ActiveUser => UserInfo.Username; 
    public static string ActiveUserPath => [email protected]"{Application.StartupPath}\{ActiveUser}"; 
    public static string ActiveUserImg => [email protected]"{ActiveUserPath}\User.png"; 
} 

class UserInfo 
{ 
    public static string Username = "-1064548"; //Working 
} 

class Starting 
{ 
    public void Login (string Username, string Pwd) 
    { 
     UserInfo.Username = "BruceWayne"; 
     MessageBox.Show (PublicVariable.ActiveUser.ToString()); 
    } 
} 

另外,您可以使用方法,以及:

class PublicVariable 
{ 
    public static string ActiveUser() => UserInfo.Username; 
    public static string ActiveUserPath() => [email protected]"{Application.StartupPath}\{ActiveUser()}"; 
    public static string ActiveUserImg() => [email protected]"{ActiveUserPath()}\User.png"; 
} 

class UserInfo 
{ 
    public static string Username = "-1064548"; //Working 
} 

class Starting 
{ 
    public void Login (string Username, string Pwd) 
    { 
     UserInfo.Username = "BruceWayne"; 
     MessageBox.Show (PublicVariable.ActiveUser().ToString()); 
    } 
} 

实际上有没有属性和方法之间的主要区别。但是,字段(您使用它们)是不同的,因为它们在依赖值更改时不会更新它们的值。这意味着,只要您没有对其他值的引用(对象的情况,就像您的类Starting的对象那样),字段值不会更新。

+0

谢谢你的回复,我的问题已经很快解决了。 – Emre