2013-04-30 56 views
0

我試過了很多來源,但我不明白需要做什麼,因爲我不是C#開發人員。我被分配到這個項目的唯一原因是因爲我們需要連接的Web服務顯然只在C#中兼容。所以我只是在學習,因爲我試圖完成這個項目。我們部門沒有其他人。知道C#。 我正在構建一個SSIS包,並使用C#進行「腳本任務」。該工具創建的scriptMain.cs是這個如何在另一個文件中調用C#中的另一種方法

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()一切都會變得紅色錯誤下面說 「的對象引用需要非爲static c字段,方法或屬性..「

我只是想調用其他方法,以便它可以執行其功能。

如果你可以儘可能少的技術,你可以是,那將是非常好的。正如我剛纔所說的,我只是在學習C#時經歷這個項目。

謝謝!

回答

3

將其更改爲:

public static void Main() 

總之,這是因爲static需要留下來。

詳細一點:方法的默認可訪問性爲private,所以現有的方法相當於private static void Main()。這應該更改爲public,以便您可以從您的課程ScriptMain中調用它。

static意味着它屬於類Program,並且可以稱爲Program.Main(),而不是一個實例,這將意味着它只能被稱爲從一個實例,例如new Program().Main()

+0

不錯:)工作,謝謝你的解釋。 – 2013-04-30 14:36:40

2

嘗試

public class Program 
{ 
    public static void Main() 
    { 
+0

這個作品也是如此。蒂姆S.只是打你...大聲笑...感謝的人。 – 2013-04-30 14:37:10

0

當執行用C#編寫的程序,對於標有.entrypoint IL指令的靜態方法,該方法或者任何參數,或類型串的單個參數的CLR搜索[] ,並具有無效或者int返回類型,並執行它

所以什麼都你必須做,你必須把它叫做靜態主要功能

+0

提供給OP的代碼片段可能*也包含供應商代碼示例中的一個入口點,但問題與入口點無關。在這種情況下,'Main'是OP嘗試從另一種方法調用的完美普通方法。 – shambulator 2013-04-30 14:34:31

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()是程序(即使不是這種情況下,入口點你可能有麻煩的編譯/運行的代碼)你需要d通過查看解決方案屬性告訴編譯器,實際ScriptMain.MainScript()是入口點。

+1

您不能將它命名爲'class',因爲這是一個保留關鍵字。您可以使用例如'@ class'或'myClass'。 – 2013-04-30 14:31:16

+0

允許我facepalm。 – Izzy 2013-04-30 14:35:09

+0

甚至更​​好,請使用OP代碼片段中的名稱。 – shambulator 2013-04-30 14:35:52

相關問題