Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.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中声明的变量/常量? 不需要像这样传递它:静态字符串my\u方法(字符串my\u变量\u to\u pass) 只需使用static void my_method() 我想要的是将任何其他方法调用到Main中,它必须使用Main中声明的变量 我也不想使用公共静态类,因为它似乎不是正确的方法。 还有别的办法吗 这是我想要的一个例子。此代码不起作用,因为test_方法()中的“cats不存在于当前竞争中”。 但是,我如何才能使它在不添加太复杂的代码的情况下工作呢 usi

如何在另一个方法中使用Main中声明的变量/常量? 不需要像这样传递它:
静态字符串my\u方法(字符串my\u变量\u to\u pass)
只需使用
static void my_method()

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

我也不想使用公共静态类,因为它似乎不是正确的方法。 还有别的办法吗

这是我想要的一个例子。此代码不起作用,因为test_方法()中的“cats不存在于当前竞争中”。 但是,我如何才能使它在不添加太复杂的代码的情况下工作呢

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);
    }
}
我也不想使用公共静态类,因为它似乎不是正确的方法。还有别的办法吗

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

变量的作用域现在仅在方法级别上,您不能从其他任何地方访问它

这将有助于:

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

    static void Main(string[] args)
    {
那就叫它:

var c = Program.Cats;
您还可以将属性封装到一个类中,并移动该实例

我也不想使用公共静态类,因为它似乎不是正确的方法。还有别的办法吗

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

变量的作用域现在仅在方法级别上,您不能从其他任何地方访问它

这将有助于:

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

    static void Main(string[] args)
    {
那就叫它:

var c = Program.Cats;

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

您可以在类级别定义变量,以便将变量的作用域限定到整个类:

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);
    }
}

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

您可以在类级别定义变量,因此它们的作用域为整个类:

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);
    }
}
由于您在静态方法中使用此字段,请确保您的字段也是静态的,因为您的静态方法将不允许访问和实例字段

我想要的是将任何其他方法调用到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);
    }
}
我想要的是将任何其他方法调用到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);
    }
}

声明
静态字符串cats
程序中
类:

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
就可以被
程序

中定义的任何
静态
方法访问和使用
程序中
类:

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
可以被
程序
类中定义的任何
静态
方法访问和使用

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

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();
    }
}

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

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();
    }
}


那么为什么不使用私有静态呢?将
cats
作为参数传递,或者将其设置为类作用域。将“cats”设置为
程序中的静态变量
我也不想使用公共静态类,因为它似乎不是正确的方法
-正确的在本例中,方法是将其作为参数传递。所以在提到两种方法之后,您会问是否有一种方法可以做到这一点。显然你已经知道怎么做了。为什么不使用私有静态类呢?将
cats
作为参数传递,或者将其设置为类范围的字段。将“cats”设置为
程序中的静态变量
我也不想使用公共静态类,因为它似乎不是正确的方式
-正确的在本例中,方法是将其作为参数传递。所以在提到两种方法之后,您会问是否有一种方法可以做到这一点。显然你已经知道怎么做了。唯一一个指出在方法体之外访问局部变量是不可能的人)@SergeyBerezovskiy,这完全是错误的。闭包特别允许这样做。@Servy是的,这是真的,尽管我认为这与这个问题无关。@Kapol这是解决这个问题的糟糕方法,当然。这并不能改变这个事实,即答案在其声明中是错误的。@SergeyBerezovskiy不,那是错误的。闭包特别允许您访问方法体外部的局部变量,而不仅仅是值。您可以获取值、设置值、获取变量引用等。闭包关闭变量,而不是值。唯一指出在方法体之外访问局部变量是不可能的人)@SergeyBerezovskiy这完全是错误的。闭包特别允许这样做。@Servy是的,这是真的,尽管我认为这与这个问题无关。@Kapol这是解决这个问题的糟糕方法,当然。这并不能改变这个事实,即答案在其声明中是错误的。@SergeyBerezovskiy不,那是错误的。闭包特别允许您访问方法体外部的局部变量,而不仅仅是值。您可以获取值、设置值、获取变量引用等。闭包关闭变量,而不是值。