2012-08-29 71 views
1

用C#編寫 exe文件,我需要一個複雜的返回值返回到另一個C#項目如何從一個main()在C#中獲得一個複雜的返回值

這裏是我的代碼:

class Program 
{ 
    private class MyObject 
    { 
     private int num; 

     public int Num 
     { 
      get 
      { 
       return (this.num); 
      } 
      set 
      { 
       this.num = value; 
      } 
     } 

     public MyObject(int num) 
     { 
      this.Num = num; 
     } 

    } 

    [STAThread] 
    public static MyObject Main(string[] args) 
    { 
     return new MyObject(5); 
    } 
} 

這給了我以下錯誤: ... \ ConsoleApplication1.exe' 不包含適用於入口點的靜態'Main'方法。

我試過玩它,但我沒有成功,使它返回一個複雜的價值。

+0

爲什麼你需要那個?在程序之間發送對象有很多種方法。 –

回答

7

您無法從Main方法中完成此操作,該方法意在成爲過程的入口點。

如果您正在編寫代碼以直接從其他代碼中調用,那麼您幾乎可以肯定會構建一個類庫項目。你可以從一個應用程序添加引用到另一個應用程序,但它是不尋常的(至少在單元測試外)。如果你想這樣做,你應該調用一個不同的方法,而不是Main。 (您可以Main方法中聲明一個類的方法,並使用不同類的「正常」的入口點,但似乎毫無意義複雜。)

+0

我怎樣才能得到一個.exe其他然後在主要寫回報的返回值? 如果我打電話給另一個函數,它會簡單地將它的值返回到主 我需要主要將值返回到C#代碼,我有... –

+1

@KostyaSydoruk從主返回已傳統上用於簡單地指示程序是否正常退出。如果您需要更復雜的信息,請考慮將程序的「輸出」寫入文件。或者使用庫到庫調用(如Jon解釋)或使用進程間通信(例如wcf)。但是從主體回報是一個相當簡單的信息,而不是你想要的。 – payo

+0

我非常感謝你 –

0

如前所述,如果你調用你的exe文件一個獨立的可執行文件,然後Main必須運行,所有你得到的是傳統的過程輸入/輸出。

但是,如果您真的需要,也可以將exe作爲庫引用。

如果這是你的EXE代碼:

public class MyObject 
{ 
    private int num; 

    public int Num 
    { 
     get 
     { 
      return (this.num); 
     } 
     set 
     { 
      this.num = value; 
     } 
    } 

    public MyObject(int num) 
    { 
     this.Num = num; 
    }  
} 

public class Program 
{ 
    public static MyObject DoWork(int num) 
    { 
     return new MyObject(num); 
    } 

    [STAThread] 
    public static int Main(string[] args) 
    { 
     DoWork(5); 

     return 0; 
    } 
} 

從另一個EXE或DLL(假設你已經提到你的第一個exe文件),你可以調用這樣的代碼:

MyObject obj = Program.DoWork(8) 

這不過,這是一種非常不尋常的方法。如果你有定義豐富的類/方法的庫,你需要在多個地方,你應該真的把它們放在一個dll中。

相關問題