【问题标题】:Use variables from class/method in other classes/ methods在其他类/方法中使用类/方法中的变量
【发布时间】:2020-04-06 03:56:51
【问题描述】:

我创建了一个名为 MyVars 的类,它只是用来存储变量以供整个程序使用。我尝试以不同的方法将变量添加到同一个类,但结果是相同的。我基本上想将一些变量设为全局变量,以便我可以使用它们。

 class MyVars
{ 
    public string nameFirst;
    public string nameLast;
    public int age;
    public double height;
}
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Enter first name:");
        nameFirst = Console.ReadLine();
        Console.WriteLine("Enter last name:");
        nameLast = Console.ReadLine();
        Console.WriteLine("Enter age:");
        age = Console.ReadLine();
    }

这基本上就是我编写的代码。有没有办法让变量能够在不同的方法中使用,我不关心类,因为我不介意为其他类重新制作它们。

【问题讨论】:

  • 将您的调用和变量设为静态
  • 虽然 MyVars 中的字段是公开的,但您的 Program.main 方法中没有 MyVars 的实例。因此,您要么必须拥有 MyVars 的实例(推荐),要么采用@NoumanBhatti 描述的静态方法(恕我直言不推荐)。此外,您可能想看看这里:docs.microsoft.com/en-us/dotnet/csharp/programming-guide 并阅读类、成员等。

标签: c#


【解决方案1】:

你需要在Main方法中创建一个MyVars的实例,并在定义class MyVars之前添加public关键字

public class MyVars
{ 
    public string nameFirst;
    public string nameLast;
    public int age;
    public double height;
}
class Program
{
    static void Main(string[] args)
    {
        MyVars myVars = new MyVars();
        Console.WriteLine("Enter first name:");
        myVars.nameFirst = Console.ReadLine();
        Console.WriteLine("Enter last name:");
        myVars.nameLast = Console.ReadLine();
        Console.WriteLine("Enter age:");
        myVars.age = Console.ReadLine();
    }
}

【讨论】:

  • 程序现在可以运行了。我能问一下 MyVars myVars = new MyVars();确实以及我应该如何为其他课程更改它。那么我是否只需更改名称并将其设为小写以用于不同的类?
  • @ExiusCain MyVars myVars = new MyVars(); 创建MyVars 的实例,您可以访问MyVars 类中的属性和方法。是的,只需更改名称并将其设为小写以用于不同的类
【解决方案2】:

这是你要找的吗?

class Program
{
    public static string nameFirst;
    public static string nameLast;
    public static int age;
    public static double height;

    static void Main(string[] args)
    {
        Console.WriteLine("Enter first name:");
        nameFirst = Console.ReadLine();
        Console.WriteLine("Enter last name:");
        nameLast = Console.ReadLine();
        Console.WriteLine("Enter age:");
        age = Console.ReadLine();
    }
}

一般来说,类的主要目的是将数据/变量与使用或更改数据/变量的方法组合在一起。

【讨论】:

  • 这不起作用。我试过你说的,但出现了同样的错误。它说'错误 CS0120 非静态字段、方法或属性'Program.nameFirst'需要对象引用'
  • 这是有道理的。静态方法不能访问非静态变量。我已经改变了我的答案,使所有变量也都是静态的。
【解决方案3】:

这会对你有所帮助。

  1. 创建单独的 MyVars.cs 类。最好创建一个单独的文件,如下所示。

public class MyVars
{ 
    public string NameFirst {get;set;}
    public string NameLast {get;set;}
    public int Age {get;set;}
    public double Height {get;set;}
}

创建 MyVars 类的新实例。您可以将此实例作为参数传递给其他方法。或者您可以使用任何其他方法创建 MyVars 类的新实例。

class Program
{
    static void Main(string[] args)
    {  
        // New instance of MyVars 
        MyVars myVars = new MyVars ();

        Console.WriteLine("Enter first name:");
        myVars.NameFirst = Console.ReadLine();
        Console.WriteLine("Enter last name:");
        myVars.NameLast = Console.ReadLine();
        Console.WriteLine("Enter age:");
        myVars.Age = Console.ReadLine();
    }
}

【讨论】:

    【解决方案4】:

    我将向您展示如何做到这一点,但我也会要求您不要这样做。这是一条最终会非常非常糟糕的道路。使用全局变量会导致代码非常难以维护。所以...这里是如何做到的......但不要这样做。

    public static class MyVars
    {
        public static string nameFirst;
        public static string nameLast;
        public static int age;
        public static double height;
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Enter first name:");
            MyVars.nameFirst = Console.ReadLine();
            Console.WriteLine("Enter last name:");
            MyVars.nameLast = Console.ReadLine();
            Console.WriteLine("Enter age:");
            MyVars.age = int.Parse(Console.ReadLine());
        }
    }
    

    阅读此答案,了解为什么要(几乎)不惜一切代价避免使用全局变量:

    https://stackoverflow.com/a/485020/5753629

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-09
      • 2022-01-19
      • 2016-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多