在C#中调用子程序

时间:2016-09-09 08:25:04

标签: c# console console-application

任何人都可以帮助我 - 我是C#控制台应用程序的新手,并试图定义一个子程序来替换文件中的一串文本。

我不断收到错误:

Error CS0119 'Program.Main(string[])' is a method, which is not valid in the given context SSReplace d:\users\mtait\documents\visual studio 2015\Projects\SSReplace\SSReplace\Program.cs

感谢您的帮助,

标记

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

namespace SSReplace
{
class Program
{
    static void Main(string[] args)
    {
        SSReplace.Program.Main.ReplaceInFiles("D:\\users\\mtait\\documents\\visual studio 2015\\Projects\\SSReplace\\test_fic_ISUK.txt", "Begin", "Begin2");
    }

    /// <summary>
    /// Replaces text in a file.
    /// </summary>
    /// <param name="filePath">Path of the text file.</param>
    /// <param name="searchText">Text to search for.</param>
    /// <param name="replaceText">Text to replace the search text.</param>
    public void ReplaceInFiles(string filePath, string searchText, string replaceText)
    {
        StreamReader reader = new StreamReader(filePath);
        string content = reader.ReadToEnd();
        reader.Close();

        content = Regex.Replace(content, searchText, replaceText);

        StreamWriter writer = new StreamWriter(filePath);
        writer.Write(content);
        writer.Close();
    }

}
}

2 个答案:

答案 0 :(得分:2)

您需要将方法标记为静态:

public static void ReplaceInFiles

静态方法无法调用实例方法,因为没有创建Program的实例。

要调用该方法,只需使用其名称ReplaceInFiles,因为它位于同一个命名空间和同一个类中。无需使用之前的完整SSReplace.Program.Main

来自C#规格:

  

使用static修饰符声明的方法是静态方法。静止的   方法不能在特定实例上运行,只能直接运行   访问静态成员。

     

没有静态修饰符声明的方法是实例方法。一个   instance方法在特定实例上运行,并且可以访问两者   静态和实例成员。实例方法的实例   被调用的可以像这样显式访问。这是一个错误   请参考静态方法。

答案 1 :(得分:0)

首先:在C#中没有子程序,它被称为方法

第二:方法(与任何其他成员一样)在中定义,因此属于该类的实例类本身< / em>(static成员)。因此写下这个:

var p = new Program();  // create a new instance of Program
p.ReplaceInFiles(myFile, "Begin", "Begin2"); // call the method on that instance

由于您已经在命名空间SSReplace中,您还可以省略代码中的部分。

另外制作方法static。然后你可以这样称呼它:

Program.ReplaceInFiles(myFile, "Begin", "Begin2");

请注意,既没有命名空间也没有Main - 方法的名称。但是,即使Program - 部分是可选的,也使以下内容有效:

ReplaceInFiles(myFile, "Begin", "Begin2");