C# 如何从另一个类中获得价值?
这是我的Main.xaml.csC# 如何从另一个类中获得价值?,c#,C#,这是我的Main.xaml.cs private void Button_Click(object sender, RoutedEventArgs e) { User u = new User(); u.id = 1; u.access = 2; u.username = "USER1"; } 这是User.cs class User { public int id; public int access; public string
private void Button_Click(object sender, RoutedEventArgs e)
{
User u = new User();
u.id = 1;
u.access = 2;
u.username = "USER1";
}
这是User.cs
class User
{
public int id;
public int access;
public string username;
public int ID
{
get { return id; }
set { id = value; }
}
public int Access
{
get { return access; }
set { access = value; }
}
public string Username
{
get { return username; }
set { username = value; }
}
}
目标:
我在Main.xaml.cs中创建了另一个按钮:
private void Button_Click_1(object sender, RoutedEventArgs e)
{
User u = new User();
MessageBox.Show(u.Username.ToString());
}
我的目标是从User.cs中获取以前在“其他”按钮中分配的值。点击按钮
如何显示分配给User.cs的值的messagebox?在代码中,您正在创建两个不同的对象 试着这样做:
User _user = new User();
private void Button_Click(object sender, RoutedEventArgs e)
{
_user.id = 1;
_user.access = 2;
_user.username = "USER1";
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
MessageBox.Show(_user.Username);
}
在代码中,您正在创建两个不同的对象 试着这样做:
User _user = new User();
private void Button_Click(object sender, RoutedEventArgs e)
{
_user.id = 1;
_user.access = 2;
_user.username = "USER1";
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
MessageBox.Show(_user.Username);
}
变量是局部变量,仅在声明它们的方法中可见。而是在类中声明用户变量:
class Main
{
private User user;
private void Button_Click(object sender, RoutedEventArgs e)
{
user = new User();
user.id = 1;
user.access = 2;
user.username = "USER1";
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
if(user == null)
{
MessageBox.Show("create user first");
}
else
{
MessageBox.Show(user.Username.ToString());
}
}
}
现在,两个方法将使用相同的用户类实例
顺便说一下,您可以在用户类中使用自动属性。更易于键入,且不易出错:
class User
{
public int ID {get; set; }
public int Access {get;set;}
public string Username {get;set;}
}
变量是局部变量,仅在声明它们的方法中可见。而是在类中声明用户变量:
class Main
{
private User user;
private void Button_Click(object sender, RoutedEventArgs e)
{
user = new User();
user.id = 1;
user.access = 2;
user.username = "USER1";
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
if(user == null)
{
MessageBox.Show("create user first");
}
else
{
MessageBox.Show(user.Username.ToString());
}
}
}
现在,两个方法将使用相同的用户类实例
顺便说一下,您可以在用户类中使用自动属性。更易于键入,且不易出错:
class User
{
public int ID {get; set; }
public int Access {get;set;}
public string Username {get;set;}
}
原因是您正在单击按钮的范围内创建一个对象, 这样,外部作用域就不可用了 要解决此问题,只需将用户对象的声明移出, 在meethods中,只需给它们赋值 以下是基于您的代码的解决方案:
using System;
class User
{
public int id;
public int access;
public string username;
public int ID
{
get { return id; }
set { id = value; }
}
public int Access
{
get { return access; }
set { access = value; }
}
public string Username
{
get { return username; }
set { username = value; }
}
}
public class Program
{
User u; // Moved the object outside the method.
private void Button_Click(object sender, RoutedEventArgs e)
{
u = new User(); // Assigned value
u.id = 1;
u.access = 2;
u.username = "USER1";
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
// User u = new User(); // No need of this
MessageBox.Show(u.Username.ToString());
}
public static void Main()
{
Console.WriteLine("Hello World");
}
}
原因是您正在单击按钮的范围内创建一个对象, 这样,外部作用域就不可用了 要解决此问题,只需将用户对象的声明移出, 在meethods中,只需给它们赋值 以下是基于您的代码的解决方案:
using System;
class User
{
public int id;
public int access;
public string username;
public int ID
{
get { return id; }
set { id = value; }
}
public int Access
{
get { return access; }
set { access = value; }
}
public string Username
{
get { return username; }
set { username = value; }
}
}
public class Program
{
User u; // Moved the object outside the method.
private void Button_Click(object sender, RoutedEventArgs e)
{
u = new User(); // Assigned value
u.id = 1;
u.access = 2;
u.username = "USER1";
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
// User u = new User(); // No need of this
MessageBox.Show(u.Username.ToString());
}
public static void Main()
{
Console.WriteLine("Hello World");
}
}
在第一次单击按钮时,您正在创建一个用户,当它超出范围时,方法结束,您就忘记了它。在第二个示例中,您创建的新用户与第一个用户没有任何关联。并且具有空UsernameOT当您使用带有显式支持字段的属性时,这些字段应为空private@HansKe我明白了。我的想法完全错误,然后使用新用户;在两个按钮单击中,第一次使用是可以的,尽管变量的范围可能应该是类级别。第二个是你不想要的——你想要使用在尴尬时刻之前设置的值,当每个人同时开始写答案时,一旦写完,发现其他人都做了同样的事情:p:在第一次点击按钮时,你正在创建一个用户,当它超出范围时,方法结束时就忘记了它。在第二个示例中,您创建的新用户与第一个用户没有任何关联。并且具有空UsernameOT当您使用带有显式支持字段的属性时,这些字段应为空private@HansKe我明白了。我的想法完全错误,然后使用新用户;在两个按钮单击中,第一次使用是可以的,尽管变量的范围可能应该是类级别。第二个是你不想要的——你想要使用在尴尬时刻之前设置的值,当每个人都开始同时写答案时,一旦完成,发现其他人都做了同样的事情:p:d感谢asnwer!为什么要在变量之前使用uuline?只是一个命名约定,您可以避免它喜欢它!-:DJust如果我能给你一个建议,避免用单个字母或没有意义的名字来命名变量,通常我们倾向于使用一个有特定意义的名字来理解代码,即使是在一年之后也要感谢asnwer!为什么要在变量之前使用uuline?只是一个命名约定,您可以避免它喜欢它!-:DJust如果我能给你一个建议,避免用单个字母或没有意义的名字来命名变量,通常我们倾向于使用一个有特定意义的名字来理解代码,即使是多年以后