我寫了一些使用Sharp Develop IDE轉換爲C#的VB代碼。 我定義了一個接口,IElement
,它由返回自己的XML表示的對象實現。任何實現這個接口的對象都應該能夠返回它的TagName和它的XML字符串表示。爲了得到它的XML字符串,它可能需要遍歷它的子/集合集合來獲取其所有子對象的XML表示。無法實現接口成員,因爲它不是公開的
從Element繼承的類可以使用其基類的GetXml和GetNestedXml或選擇覆蓋它,但GetNestedXml函數不需要是公共的,因爲它只能從派生類的公共GetXml函數中調用。因此,在原始的VB版本中,GetNestedXML的範圍被設置爲受保護的。然而,夏普發展和我有問題試圖將此代碼轉換爲C#。請參閱下面的錯誤。
在附註中,我確實意識到可能有更好的方法來實現這一點,我會對易於着火的建議感興趣。 :-) 謝謝。
Public Interface IElement
ReadOnly Property TagName() As String
ReadOnly Property GetXml(Optional ByVal targetXml As Integer = TargetXmlEnum.All) As String
Function GetNestedXml() As String
End Interface
Public Class Element
Implements IElement
Public ReadOnly Property TagName() As String Implements IElement.TagName
Get
'....
End Get
End Property
Public Overridable ReadOnly Property GetXml(Optional ByVal targetXml As Integer = TargetXmlEnum.All) _
As String Implements IElement.GetXml
Get
'....
End Get
End Property
Protected Overridable Function GetNestedXml() As String Implements IElement.GetNestedXml
'....
End Function
End Class
轉換C#:
public interface IElement
{
string TagName { get; }
string GetXml { get; }
string GetNestedXml();
}
public class Element : IElement
{
public string TagName {
get { //... }
}
public virtual string GetXml
{
get
{
//...
}
}
protected virtual string GetNestedXml()
{
//...
}
}
錯誤:
Error 1 'Smit.SpreadsheetML.Element' does not implement interface member 'Smit.SpreadsheetML.IElement.GetNestedXml()'. 'Smit.SpreadsheetML.Element.GetNestedXml()' cannot implement an interface member because it is not public. D:\Users\Chad\Desktop\SMIT\SMIT.SpreadsheetML.ConvertedToC#\Element.cs 41 24 Smit.SpreadsheetML.Converted
是啊,我沒有嘗試,但錯誤依然存在。無論如何,即使它沒有解決問題,它似乎也值得添加。謝謝。 – ChadD
只需刪除「受保護的虛擬字符串GetNestedXml()」實現 –
@MilanRaval它會給虛擬部分的錯誤,如果保護被刪除。 –