2011-08-26 136 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#做,并在需要时随时转换。