调用c#中的子程序

本文关键字:子程序 调用 | 更新日期: 2023-09-27 18:06:23

有人可以帮助我-我是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();
    }
}
}

调用c#中的子程序

你需要将你的方法标记为static:

public static void ReplaceInFiles

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

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

来自c#规范:

用静态修饰符声明的方法是静态方法。一个静态方法不能在特定实例上操作,只能直接访问静态成员

没有静态修饰符的方法是实例方法。一个方法在特定实例上操作,并且可以访问这两个实例静态成员和实例成员。实例方法所作用的实例被调用的对象可以显式地访问。……是错误的在静态方法中引用它。

首先:在c#中没有子程序这种东西,它被称为方法

第二:方法(作为任何其他成员)在中定义,因此属于该类的实例类本身 (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");