C# 在C中调用子例程#

C# 在C中调用子例程#,c#,console,console-application,C#,Console,Console Application,有谁能帮我一下吗?我对C#console应用程序还不熟悉,正在尝试定义一个子程序来替换文件中的字符串 不过,我还是不断发现错误: Error CS0119'Program.Main(string[])是一个方法,在给定上下文中无效SSReplace d:\users\mtait\documents\visual studio 2015\Projects\SSReplace\SSReplace\Program.cs 谢谢你的帮助 标记 使用系统; 使用System.Collections.Gene

有谁能帮我一下吗?我对C#console应用程序还不熟悉,正在尝试定义一个子程序来替换文件中的字符串

不过,我还是不断发现错误:

Error CS0119'Program.Main(string[])是一个方法,在给定上下文中无效SSReplace d:\users\mtait\documents\visual studio 2015\Projects\SSReplace\SSReplace\Program.cs

谢谢你的帮助

标记

使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用System.IO;
使用System.Text.RegularExpressions;
命名空间替换
{
班级计划
{
静态void Main(字符串[]参数)
{
SSReplace.Program.Main.replaceinfles(“D:\\users\\mtait\\documents\\visualstudio 2015\\Projects\\SSReplace\\test\fic\u ISUK.txt”、“Begin”、“Begin2”);
}
/// 
///替换文件中的文本。
/// 
///文本文件的路径。
///要搜索的文本。
///替换搜索文本的文本。
公共void replaceInlines(字符串文件路径、字符串搜索文本、字符串替换文本)
{
StreamReader=新的StreamReader(文件路径);
字符串内容=reader.ReadToEnd();
reader.Close();
content=Regex.Replace(content、searchText、replaceText);
StreamWriter writer=新的StreamWriter(文件路径);
作者:写(内容);
writer.Close();
}
}
}

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

public static void ReplaceInFiles
静态方法不能调用实例方法,因为没有创建
程序的实例

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

根据C#规范:

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

未声明静态修饰符的方法是实例方法。一 实例方法对特定实例进行操作,并且可以访问这两个实例 静态和实例成员。实例方法所在的实例 可以按如下方式显式访问调用的。这是一个错误 在静态方法中引用此项


第一:C#中没有子程序,它被称为方法

第二:方法(与任何其他成员一样)在类中定义,因此属于该类的实例或类本身(
static
member)。因此,写下以下内容:

var p = new Program();  // create a new instance of Program
p.ReplaceInFiles(myFile, "Begin", "Begin2"); // call the method on that instance
由于您已经在名称空间
SSReplace
中,您还可以从代码中省略该部分

另一种方法是将方法
设置为静态
。然后你可以这样称呼它:

Program.ReplaceInFiles(myFile, "Begin", "Begin2");
请注意,
Main
-方法既没有名称空间也没有名称。但是,即使是
程序
-部分也是可选的,这使得以下内容也有效:

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

您的命名空间混淆了:
ReplaceInFiles
不在
Main
中-只在
程序中。ReplaceInFiles
就可以了。
ReplaceInFiles(myFile, "Begin", "Begin2");