2016-02-24 134 views
0

我想了解下面的代碼。委託與參數定義但用作參數沒有自己的參數? c#

它有一個功能創建與代表CallbackRcvData作爲參數。 委託是用參數定義的,但代碼中的函數只是將委託作爲參數表示,但該參數/委託沒有自己定義中的必需參數。這個構造奇妙地起作用。我不明白...我是代表新人。如果您需要更多信息,請告訴我們

函數OpenConnection來自dll。

public class myClass 
{  
    public delegate int CallbackRcvData(UInt32 ConnectionId, IntPtr Data, Int32 size, Int32 Status); 

    public void Create(string TargetName, string Login, string Password, Int32 Protocol,UInt32 PortCOM, CallbackRcvData Callback) 
    { 
     int result = 0; 
     result = OpenConnection(TargetName, ref this.ConnectionId, Login, Password, 0, Protocol, 0, 0, Callback,0); 
     if (result != 0) 
     { 
      throw new System.ArgumentException("Parameter cannot be null", "original"); 
     } 
    } 
} 


public class callingClass 
{ 
    ...in some Method 
    ptrFct = new myClass.CallbackRcvData(this.RcvData); 

    public int RcvData(UInt32 ConnectionId,IntPtr Data, Int32 size, Int32 Status) 
    { 
     if ((size > 0) && (Status == 0) && (Data != null)) 
     { 
      this.Displaytext(Marshal.PtrToStringAnsi(Data)); 
     } 

     return 0; 
    } 

    public void ThreadProc() 
    { 
     try 
     { 
      //open putty session , portCOM not used in this example not serial link 
      Session.Create(Settings.DeviceAdd, Settings.Login, Settings.Password, Settings.protocol, 0, ptrFct);     
      this.Connection_End(1); 
     } 
     catch 
     { 
      this.Connection_End(0); 
     } 
    } 
} 

抱歉,錯誤代碼格式不正確。我發現在這裏使用格式選項非常困難。

回答

0

在代碼的函數只是規定了委託作爲參數,但參數/委託不具有他自己的定義

所需要的參數。當你試圖傳遞一個類作爲參數到一個方法,你是否需要在參數列表中包含該類中的所有方法?你需要提供班級的所有屬性等嗎?

定義委託的整個是您定義方法簽名的地方,以便您可以在其他地方使用委託標識符引用與該簽名匹配的方法。

+0

我想我明白了。委託* Callback *可以被理解爲指向函數的指針,它被引用到* OpenConnection *函數中,該函數又用參數調用引用的函數。 – Simorgh