2015-02-07 85 views
-3

我在兩個單獨的項目中有兩個幾乎相同的代碼塊;第二個項目被創建爲使用與第一個相同的ConnectClass。「在以下方法或屬性之間的調用是不明確的」,代碼相同

然而,在新的項目(下面所示的第二代碼塊),編譯器爲關於錯誤處理程序靜態無效client_ErrorEvents以下錯誤信息(對象發件人,abcErrorEventArgs E):

呼叫是不明確的「ProjectName.ConnectClass.client_ErrorEvents(對象,abcErrorEventArgs)」和「ProjectName.ConnectClass.client_ErrorEvents(對象,abcErrorEventArgs)」

這裏是第一碼塊(在相關部分)

:下面方法或屬性之間
public partial class ConnectClass 
{ 

    public static a.b.c.Client client = new a.b.c.Client(); 
    public static string DriveLetter; 
    public static string CurrentDate; 

    //_____________________ 

    public static void StoreVars(Form1 frm) 
    { 
     DriveLetter = frm.textBox4.Text; 
     CurrentDate = frm.textBox5.Text; 
    } 

    public static string Connect(Form1 frm, int Call) 
    { 
     string host = "127.0.0.1"; 
     int port = 7496; 
     int clientId = 0; 

     string Result = "Connected"; 

     try 
     { 
      client.Connect(host, port, clientId); 
     } 
     catch (SocketException e) 
     { 
      Result = e.ToString(); 
     } 

     //if (Call == 0) 
     client.Error += new EventHandler<a.b.c.ErrorEventArgs>(client_ErrorEvents); 

     return Result; 
    } 

    static void client_ErrorEvents(object sender, a.b.c.ErrorEventArgs e) 
    { 
     int ErrorCode; 

     string path = DriveLetter + "/ThisPath/File.txt"; 
     FileStream ThisFile = new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite); 
     StreamWriter sw = new StreamWriter(ThisFile); 

     DateTime dtNow = DateTime.Now; 
     ErrorCode = (int)e.ErrorCode; 
     sw.BaseStream.Seek(0, SeekOrigin.End); 
     sw.Write(dtNow); 
     sw.Write(" "); 
     sw.Write(e.ErrorCode); 
     sw.Write(" "); 
     sw.Write(e.ErrorMsg); 
     sw.Write(sw.NewLine); 
     sw.Close(); 
     ThisFile.Close(); 
    } 

這裏是第二個代碼塊(在相關部分)

public partial class ConnectClass 
{ 
    public static a.b.c.Client client = new a.b.c.Client(); 
    public static string DriveLetter; 
    public static string CurrentDate; 

    //_____________________ 

    public static void StoreVars(Form1 frm) 
    { 
     DriveLetter = frm.TBx_Drive.Text; 
     CurrentDate = frm.TBx_Date.Text; 
    } 

    public static string Connect(Form1 frm) 
    { 
     string host = "127.0.0.1"; 
     int port = 7496; 
     int clientId = 10; 

     string Result = "Connected"; 

     try 
     { 
      client.Connect(host, port, clientId); 
     } 
     catch (SocketException e) 
     { 
      Result = e.ToString(); 
     } 

     client.Error += new EventHandler<a.b.c.ErrorEventArgs>(client_ErrorEvents); 

     return Result; 
    } 

//這是編譯器發出錯誤信號:

static void client_ErrorEvents(object sender, a.b.c.ErrorEventArgs e) 
    { 
     string path = DriveLetter + "/ThisPath/File.txt"; 
     FileStream ThisFile = new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite); 
     StreamWriter sw = new StreamWriter(ThisFile); 

     DateTime dtNow = DateTime.Now; 
     ErrorCode = (int)e.ErrorCode; 
     sw.BaseStream.Seek(0, SeekOrigin.End); 
     sw.Write(dtNow); 
     sw.Write(" "); 
     sw.Write(e.ErrorCode); 
     sw.Write(" "); 
     sw.Write(e.ErrorMsg); 
     sw.Write(sw.NewLine); 
     sw.Close(); 
     ThisFile.Close(); 
    } 

任何想法?

非常感謝。

回答

3

您有兩個文件(partial)之間的單個類拆分,並且都實現相同的功能。

要麼讓它們不是部分的(你可能會在類上產生名稱衝突),或者在同一個類中沒有重複的方法。

查看有關在MSDN上使用partialPartial Classes and Methods in C#文章的詳細信息。

+0

如果他們是不同的項目,可能不會有名稱衝突。 – BartoszKP 2015-02-07 00:44:52

+0

@BartoszKP以某種方式,這兩個部分都可以在「新項目」中看到,所以只從一個或兩個部分中刪除'partial'仍然會使這兩個類都可見......我期望名稱衝突。 – 2015-02-07 00:50:11

+0

阿列克謝是正確的。在第二個項目中,在包含事件處理程序的相同部分類的單獨文件中已經有一個相同名稱的事件處理程序。第二個文件包含大量由另一個程序員編寫的事件處理程序,我不知道那個處理程序在那裏。謝謝你指出,阿列克謝。 – CSMasm 2015-02-07 02:27:32

相關問題