繁体   English   中英

如何从另一个文件调用C#中的另一个方法

[英]how to call another method in C# from another file

我尝试浏览许多资源,但由于我不是C#开发人员,所以我只是不明白需要做什么。 我被分配此项目的唯一原因是因为我们需要连接的Web服务显然仅与C#兼容。 因此,我在尝试完成该项目的过程中只是在学习。 在我们部门,没有其他人。 知道C#。 我正在构建一个SSIS包,并使用C#创建了一个“脚本任务”。 工具创建的scriptMain.cs是这个

using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
using ST_3c3fd2f1b7404161b62ff2b81f12192c.ServiceClient;

namespace ST_3c3fd2f1b7404161b62ff2b81f12192c.csproj
{
[System.AddIn.AddIn("ScriptMain", Version = "1.0", Publisher = "", Description = "")]
public partial class ScriptMain :     Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
{

    public void MainScript()
    {
        // TODO: Add your code here
        Program.Main();//I AM TRYING TO MAKE THE CALL TO PROGRAM.cs file Main() method
        Dts.TaskResult = (int)ScriptResults.Success;
    }
}
}

我猜这个ScriptMain.cs是运行SSIS时执行的文件。 所以我试图从上面的scriptMain.cs(Program.Main())调用下面的文件Program.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ST_3c3fd2f1b7404161b62ff2b81f12192c.ServiceClient;
using ST_3c3fd2f1b7404161b62ff2b81f12192c.csproj;

namespace ST_3c3fd2f1b7404161b62ff2b81f12192c
{
class Program
{
    static void Main()//Trying to call this so that it can execute its   methods/processes
    {
        WebClient client = GetClient();

        // Example 1 - Select Changes
        SelectTicketChanges(client);
        SelectStepChanges(client);
    }

如您所见,此Main()方法调用其他方法。 我没有编写此BTW,它是由我们尝试连接的客户端提供的。

现在,Program.Main(),Main()在下面显示红色错误,表示“由于其保护级别而无法访问Program.Main()”。

如果我改变

 static void Main()

 public void Main()

而不是我的ScriptMain.cs Program.Main()在下面说“非静态字段,方法或属性需要对象引用。”

我只希望它调用其他方法,以便它可以执行其功能。

如果您能做到尽可能少的技术,那真是太好了。 正如我所说的那样,我只是在学习C#的过程中学习这个项目。

谢谢!

更改为:

public static void Main()

简而言之,这是因为static需要保留。

更详细一点:方法的默认可访问性是private ,因此现有方法等效于private static void Main() 这应该更改为public以便您可以从ScriptMain类中调用它。

static意味着它属于Program类,并且可以被称为Program.Main() ,而不是实例,这意味着只能从实例(例如new Program().Main()调用它。

尝试

public class Program
{
    public static void Main()
    {

当执行用C#编写的程序时,CLR搜索带有.entrypoint IL指令标记的静态方法,该指令不带参数,也可以不带字符串[]类型的单个参数,并且返回类型为void或int,并且执行它

因此,无论您要做什么,都必须在Static主函数中调用它

看起来您通常需要查找OO(面向对象)编程和C#。 http://www.codeproject.com/Articles/219869/Object-Oriented-Programming-in-Csharp-NET

但是要回答您的问题,如果要访问静态方法,请先引用它们的类,然后再引用它们,例如:

Program.Main(); 

要访问非静态方法,您必须首先实例化一个对象(更确切地说是“类”),例如:

MyClass c = new MyClass();
c.Method();

附录:您可能在编译/运行该代码时遇到麻烦,因为Visual Studio认为Program.Main()是程序的入口点(即使不是这种情况),您需要告诉编译器ScriptMain.MainScript()实际上通过查看您的解决方案属性是入口点。

采用

public static void Main()
{
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM