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

时间:2013-04-30 14:21:20

标签: c# web-services ssis

我试过了很多来源,但我只是不明白需要做什么,因为我不是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()所有得到Red Error下面说 “非静态字段,方法或属性需要对象引用。”

我只是想让它调用其他方法,以便它可以执行其功能。

如果你可以尽可能少的技术,那将是非常好的。正如我所说的那样,我正在学习C#,因为我正在完成这个项目。

谢谢!

5 个答案:

答案 0 :(得分:3)

将其更改为:

public static void Main()

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

要提供更多详细信息:方法的默认可访问性为private,因此现有方法等同于private static void Main()。这应更改为public,以便您可以从班级ScriptMain拨打电话。

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

答案 1 :(得分:2)

尝试

public class Program
{
    public static void Main()
    {

答案 2 :(得分:0)

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

所以你必须要做的就是在静态主函数

中调用它

答案 3 :(得分:0)

看起来你需要查找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()是程序的入口点(即使不是这种情况)您需要告诉编译器实际上{{ 1}}是查看解决方案属性的入口点。

答案 4 :(得分:0)

使用

public static void Main()
{
}