Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从另一个类中获得价值?_C# - Fatal编程技术网

C# 如何从另一个类中获得价值?

C# 如何从另一个类中获得价值?,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

这是我的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 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如果我能给你一个建议,避免用单个字母或没有意义的名字来命名变量,通常我们倾向于使用一个有特定意义的名字来理解代码,即使是多年以后