2009-11-24 22 views
2

在將VB.NET接口轉換爲C#的同時, VB的版本定義不符合典型的(對象發件人,EventArgs的)簽名的事件:VB.NET到C#的轉換 - 接口事件聲明的非EventHandler事件

VB

Public Class SomeType 
    ' Does *NOT* inherit from EventArgs 
End Class 

Public Interface ISomething 
    Public Event SomeEvent(sender as Object, value as SomeType) 
End Interface 

什麼是C#等效ISomething?我嘗試至今都無法編譯:

回答

9

你需要一個委託類型聲明:

public delegate void SomeEventHandler(object sender, SomeType value) 

public class SomeType 
{ 
} 

public interface ISomething 
{ 
    public event SomeEventHandler SomeEvent; 
} 

或者.NET 3.5中,你可以使用內置的動作類型:

public class SomeType 
{ 
} 

public interface ISomething 
{ 
    public event Action<object, SomeType> SomeEvent; 
} 
+0

這與我的嘗試很接近;保持委託的名稱相同我試着在C#接口中聲明它 - 但它未能編譯。是否有可能將委託聲明爲接口的一部分,還是委託必須駐留在接口之外? – STW 2009-11-24 20:03:10

+0

它必須在界面之外 - 與VB不同,C#不允許在界面中嵌套類型(這對於一些事情來說是痛苦的,但是不要緊)。 – 2009-11-24 20:46:54