C# - 如何从静态void main方法调用一个方法

5

我有一些代码在static void main中,尽管我希望它调用startremdup方法(因为它使用正确的参数调用RemoveDuplicate),但我已经尝试了startremdup();

我有一些代码在static void main中,虽然我想让它调用startremdup方法(该方法使用适当的参数调用RemoveDuplicate),但我已经尝试过 startremdup();。
private void RemoveDuplicate(string sourceFilePath, string destinationFilePath)
{
    var readLines = File.ReadAllLines(sourceFilePath, Encoding.Default);

    File.WriteAllLines(destinationFilePath, readLines.Distinct().ToArray(), Encoding.Default);
}


private void startremdup(object sender, EventArgs e)
{
    RemoveDuplicate("C:\test.txt", "C:\test2.txt");
}

这些方法是否与您的主方法在同一个类中? - Jamie Dixon
2
在不先创建所属类的实例的情况下,您无法从静态方法中调用实例方法。尝试创建类的实例,例如 SomeClass sc = new SomeClass();,其中 startremdupRemoveDuplicate 属于 SomeClass,然后通过 SomeClass 访问这些方法,例如 sc.startremdup();。或者,如果它们是静态类的一部分,则需要将方法标记为静态的。 - Michael Todd
1
另外,你在将对象和 EventArgs 参数传递给 startremdup 方法时是传递了什么?此外,startremdup 是一个糟糕的方法名...如果你直接调用 RemoveDuplicate() 方法而不是将其包装在一个名字含义难以理解的方法中,会更清晰明了。 - Jamie Dixon
@Jamie:我假设startremdump是在事件(比如按钮点击)中被调用的,因此需要sender和eventargs参数,这在C#中是基本事件处理程序所必需的。 - Coeffect
@Mannimarco 他说他是从主方法中调用它的。 耸肩 - Jamie Dixon
@Jamie:我希望他只是为了测试目的从主函数调用它。否则这可能是一场徒劳的努力。 - Coeffect
7个回答

13

startremdup 是一个实例方法。这意味着你需要在包含它的类的实例上调用它。例如:

Foo foo = new Foo();
foo.startremdup(null, EventArgs.Empty);

个人认为它应该首先是一个静态方法 - 最好是一个更合理的名字 - 但这就是为什么它此时不起作用的原因。

如果我是你,我会放下当前的任务,拿起一本好的C#入门书籍 - 学习静态成员和实例成员之间的区别等。


5
使startremdup()RemoveDuplicate()均为静态方法。
private static void RemoveDuplicate(string sourceFilePath, string destinationFilePath)
{
    var readLines = File.ReadAllLines(sourceFilePath, Encoding.Default);

    File.WriteAllLines(destinationFilePath, readLines.Distinct().ToArray(), Encoding.Default);
}


private static void startremdup(object sender, EventArgs e)
{
    RemoveDuplicate("C:\test.txt", "C:\test2.txt");
}

2

同时将你的方法设为静态方法。


2

如果您从静态方法(例如Main())调用startremdup和removeduplicate,则需要将它们声明为静态。


1

在静态方法中,除非您在对象引用上调用它们,否则无法从非静态方法调用它们。请查看this


1
你需要将这两个方法都设置为静态的,或者创建一个 Main 类的实例并从中调用该方法。

1
声明 private static void startremdup(object sender, EventArgs e),因为静态方法不能调用实例方法,因为它们没有 this

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接