C#,在方法中使用Main变量而不传递参数?

时间:2017-06-08 13:09:25

标签: c#

如何在Main中声明的另一个方法中使用变量/ const? 不传递它:static string my_method(string my_variable_to_pass) 只需使用static void my_method()

我想要的是将任何其他方法调用到Main中,它必须使用Main中声明的变量。

我不想使用公共静态类,因为它似乎不是正确的方法。 还有另一种方式吗?

这是我想要的一个例子。此代码不起作用,因为当前竞争中不存在"猫#34;在test_method()里面。 但是,如果不添加太复杂的代码,我怎么能让它工作呢?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

class Program
{
    static void Main(string[] args)
    {
        string cats;

        cats = "1000 Cats";
        test_method();
        cats = "6 Cats";
        test_method();
    }

    static void test_method()
    {
        Console.Write(cats);
    }
}

5 个答案:

答案 0 :(得分:3)

  

我想要的是将任何其他方法调用到Main中,它必须使用Main中声明的变量。

如果不使用闭包,这是不可能的。但是在你的情况下,使用类级别字段要好得多,如下所示:

class Program
{
    private static string cats;

    static void Main(string[] args)
    {
        cats = "1000 Cats";
        test_method();
        cats = "6 Cats";
        test_method();
    }

    static void test_method()
    {
        Console.Write(cats);
    }
}

答案 1 :(得分:1)

  

我不想使用公共静态类,因为它似乎不是正确的方法。还有另一种方式吗?

您不需要类,但至少有静态字段或属性移动实例。这是其中之一。

变量的范围现在仅在方法级别上,您无法从其他任何位置访问它。

这样做:

class Program
{
    public static string Cats {get;private set;}

    static void Main(string[] args)
    {

然后叫它:

var c = Program.Cats;

您还可以将属性封装到类中并移动该实例。

答案 2 :(得分:1)

我认为这里的一些答案缺少一个有效点 - 程序必须是静态的,你的功能可能不应该是!

public class CatStuff
{
    private int cats;
    public CatStuff(int howManyCats)
    {
        this.cats = howManyCats;
    }

    public void TestMethod()
    {
        Console.WriteLine("{0} cats", this.cats);
    }
}

class Program
{
    static void Main(string[] args)
    {
        var cats1 = new CatStuff(1000);
        cats1.TestMethod();

         var cats2 = new CatStuff(6);
        cats2.TestMethod();
    }
}

答案 3 :(得分:0)

您可以在类级别定义变量,因此它们的范围限定为整个类:

class Program
{
    private static string cats;

    static void Main(string[] args)
    {    
        cats = "1000 Cats";
        test_method();
        cats = "6 Cats";
        test_method();
    }

    static void test_method()
    {
        Console.Write(cats);
    }
}

因为您在静态方法中使用它,所以请确保您的字段也是静态的,因为不允许静态方法访问和实例字段。

答案 4 :(得分:0)

static string cats;课程中声明Program

class Program
{
   static string cats;

  static void Main(string[] args)
  {
    cats = "1000 Cats";
    test_method();
    cats = "6 Cats";
    test_method();
  }

  static void test_method()
  {
    Console.Write(cats);
  }
}

通过cats

中定义的任何static方法都可以访问和使用Program {/ 1}}