C# 为什么我必须在任何地方使用静电?如何避免呢?

C# 为什么我必须在任何地方使用静电?如何避免呢?,c#,class,static,instance,C#,Class,Static,Instance,我正在用C#编写一个小程序,一开始我注意到visualstudio抱怨在静态函数(包括main)中只能使用静态变量和静态函数调用。我以前写过代码,尽管我必须提到我以前写过代码,我记不起在任何地方都被迫使用static。代码如下: class Program { string word = "asd"; static List<string> words = new List<string>(); static void Main(string[]

我正在用C#编写一个小程序,一开始我注意到visualstudio抱怨在静态函数(包括main)中只能使用静态变量和静态函数调用。我以前写过代码,尽管我必须提到我以前写过代码,我记不起在任何地方都被迫使用static。代码如下:

class Program
{
    string word = "asd";
    static List<string> words = new List<string>();

    static void Main(string[] args)
    {

        OpenFile();
        Debug.WriteLine(words.Count);
        anagram();

    }

    public static void OpenFile()
    {

        using (var fileStream = File.OpenRead("wordlist.txt"))
        using (var streamReader = new StreamReader(fileStream))
        {
            String line;
            while ((line = streamReader.ReadLine()) != null)
            {
                words.Add(line);
            }

        }

    }

    public void anagram()
    {

        Console.WriteLine(word);

    }

}
类程序
{
字符串word=“asd”;
静态列表单词=新列表();
静态void Main(字符串[]参数)
{
OpenFile();
Debug.WriteLine(words.Count);
字谜();
}
公共静态void OpenFile()
{
使用(var fileStream=File.OpenRead(“wordlist.txt”))
使用(var streamReader=newstreamreader(fileStream))
{
弦线;
而((line=streamReader.ReadLine())!=null)
{
添加(行);
}
}
}
公共无效字谜()
{
控制台写入线(word);
}
}
我收到错误“error CS0120非静态字段、方法或属性'Program.anagram()'需要对象引用”,我不明白为什么?我还想让单词variable也成为非静态的,但由于方法是静态的,所以我在其中使用它“必须”。有没有办法避免这种情况? 我想我对什么是静态有很好的理解,但我不想在这里使用它


感谢您的帮助。

您可以这样写您的课程:

class Program
{
    public string word = "asd";
    public List<string> words = new List<string>();

    static void Main(string[] args)
    {
        var program = new Program();
        program.OpenFile();
        Debug.WriteLine(program.words.Count);
        program.anagram();

    }

    public void OpenFile()
    {

        using (var fileStream = File.OpenRead("wordlist.txt"))
        using (var streamReader = new StreamReader(fileStream))
        {
            String line;
            while ((line = streamReader.ReadLine()) != null)
            {
                this.words.Add(line);
            }

        }

    }

    public void anagram()
    {   
        Console.WriteLine(this.word);
    }

}
static void Main(string[] args)
{
    var m = new MyClass();
    m.OpenFile();
    Debug.WriteLine(m.Words.Count);
    m.anagram();
}
类程序
{
公共字符串word=“asd”;
公共列表词=新列表();
静态void Main(字符串[]参数)
{
var program=新程序();
program.OpenFile();
Debug.WriteLine(program.words.Count);
program.anagram();
}
公共void OpenFile()
{
使用(var fileStream=File.OpenRead(“wordlist.txt”))
使用(var streamReader=newstreamreader(fileStream))
{
弦线;
而((line=streamReader.ReadLine())!=null)
{
此.words.Add(行);
}
}
}
公共无效字谜()
{   
Console.WriteLine(这个词);
}
}

静态方法是类的通用方法-如果要使用非静态方法,需要实例化它的实例。

您可以将逻辑定义到另一个类中,创建它的实例并使用其成员

public class MyClass
{
    string word = "asd";
    public List<string> Words = new List<string>();

    public void OpenFile()
    {
        using (var fileStream = File.OpenRead("wordlist.txt"))
        using (var streamReader = new StreamReader(fileStream))
        {
            String line;
            while ((line = streamReader.ReadLine()) != null)
            {
                Words.Add(line);
            }
        }
    }

    public void anagram()
    {
        Console.WriteLine(word);
    }
}

您应该阅读更多关于访问修饰符以及静态成员和实例成员的不同之处的信息。

我想您只需要查阅C#参考指南。除非创建类的实例,否则只能访问其静态方法。只有在程序入口点(通常是主方法)上才需要静态。在其他任何地方,都可以使用类的实例程序并访问变量和方法,而无需static关键字。最简单的修复方法是执行
new program().DoYourStuff()
Main
方法中,您可以使用实例字段。