Как вызвать метод из статического void - PullRequest
5 голосов
/ 17 июня 2011

У меня есть некоторый код в static void main, хотя я хотел бы, чтобы он вызывал метод startremdup (так как он вызывает RemoveDuplicate, с соответствующими параметрами) из static void main, я пробовал 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");
}

Ответы [ 7 ]

13 голосов
/ 17 июня 2011

startremdup - это метод экземпляр . Это означает, что вам нужно вызывать его для экземпляра любого класса, в котором он содержится. Например:

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

Лично это выглядит так, как будто это должен быть статический метод, предпочтительно с более разумным именем, но именно поэтому он не работает в данный момент.

На вашем месте я бы поставил ваше текущее задание и взял бы хорошую вводную книгу по C # - узнал разницу между статическими членами и членами экземпляра и т. Д.

5 голосов
/ 17 июня 2011

Сделайте 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 голосов
/ 17 июня 2011

startremdup и removeduplicate должны быть объявлены как статические, если вы вызываете его из статического метода (такого как Main ())

2 голосов
/ 17 июня 2011

Сделайте ваши методы static также.

1 голос
/ 17 июня 2011

Объявите private static void startremdup(object sender, EventArgs e), так как статический метод не может вызывать методы экземпляра, потому что у них нет this.

1 голос
/ 17 июня 2011

Вам нужно либо сделать оба этих метода статическими, либо создать экземпляр вашего класса Main и вызвать метод из этого.

1 голос
/ 17 июня 2011

Нельзя вызывать нестатические методы из статического метода, если вы не вызываете их для ссылки на объект. Проверьте это .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...