2011-08-26 94 views
1

我有接口:與代表轉換inerface從VB到C#

Public Interface ICSIItem 

    Sub Initialize() 
    Event AnswerValueChanged(ByVal sender As Object, ByVal e As NotebookAnswerChangedEventArgs) 
    Property DataContext() As Object 

End Interface 

和轉換器http://www.developerfusion.com/tools/convert/vb-to-csharp/

public interface ICSIItem 
{ 
    void Initialize(); 
    event AnswerValueChangedEventHandler AnswerValueChanged; 
    delegate void AnswerValueChangedEventHandler(object sender, NotebookAnswerChangedEventArgs e); 
    object DataContext { get; set; } 
} 

和ReSharper的說我該委託不能在接口。

這是NotebookAnswerChangedEventArgs類

public class NotebookAnswerChangedEventArgs : System.EventArgs 
{ 
    public string NewAnswer; 

    public string PreviousAnswer; 

    public NotebookAnswerChangedEventArgs(string newAnswer, string previousAnswer) : base() 
    { 
     this.NewAnswer = newAnswer; 
     this.PreviousAnswer = previousAnswer; 
    } 
} 

你能幫助這個轉換,並請更好的轉換器的網站,因爲這是非常差:/

回答

2

與VB.Net不同,C#不允許接口聲明嵌套類型。這包括代表。要解決這個問題,只需在接口外部移動AnswerValueChangedEventHandler委託。

public delegate void AnswerValueChangedEventHandler(
    object sender, 
    NotebookAnswerChangedEventArgs e); 

public interface ICSIItem { 
    void Initialize(); 
    event AnswerValueChangedEventHandler AnswerValueChanged; 
    object DataContext { get; set; } 
} 
+0

在VB.net中有一個接口允許聲明嵌套類型嗎?我不這麼認爲,但我不確定 - 我猜VB.net知道EventHandler委託 - 就這些。 – Carsten

+0

@凱尼格是的。 VB.Net允許在一個接口內嵌套類型聲明。 – JaredPar

+0

好的 - 今天學會了我的一點...奇怪你爲什麼要用這樣的東西...沒關係 - 謝謝 – Carsten

1
public interface ICSIItem { 

    void Initialize(); 
    event EventHandler<NotebookAnswerChangedEventArgs> AnswerValueChanged; 
    object DataContext { get; set; } 

} 

請注意 - 您的EventArgs支持使用的EventHandler - 我認爲在這種情況下,你應該使用EventHandler而不是重新定義你自己的代表。

但我不知道任何好的轉換器。爲什麼你轉換畢竟?只要把你的VB.net代碼放入一個dll中,並使用它從C#中 - 如果你編寫新的C#代碼,用C#做,並在需要時隨時轉換。