Ne peut pas mettre en œuvre une interface membre parce qu'il n'est pas public

J'ai écrit certains de code en VB que j'ai converti en C# à l'aide de Sharp Développer des IDE.
J'ai défini une Interface, IElement, qui est mis en œuvre par des objets qui renvoient XML représentations d'eux-mêmes. Tout objet qui implémente cette interface doit être en mesure de retourner à son nom de balise et c'est la chaîne XML de représentation. Pour obtenir la chaîne de caractères XML, il peut avoir à boucle à travers son enfant/collection imbriquées pour obtenir la représentation XML de l'ensemble de ses objets enfants.

Des Classes qui héritent de l'Élément de l'utilisation de la GetXml et GetNestedXml de sa classe de base, ou choisir de l'ignorer, mais la GetNestedXml fonction n'aurait pas à être public, car il ne serait appelé à partir de la public GetXml fonction des classes dérivées. Par conséquent, dans l'original de la version de visual basic, le champ d'application de la GetNestedXML a été mis à protégé. Cependant, Forte de Développer et j'ai des problèmes en essayant de convertir ce code en C#. Consultez l'erreur ci-dessous.

Sur une note de côté, je me rends compte qu'il pourrait y avoir de meilleures façons de mettre en œuvre et je serais intéressé à côté des suggestions qui sont faciles sur les flammes. 🙂 Merci.

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

Converti En 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()
    {
        //...
    }
}

erreur:

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
Oui, je l'ai essayer, mais l'erreur persiste. En tout cas, il semblait que quelque chose vaut la peine d'ajouter, même si cela ne résout pas le problème à la main. Merci.
Seulement supprimer les Protégés de "protégés chaîne virtuelle GetNestedXml()" mise en œuvre
elle donnera l'erreur de pièce virtuelle protégée est supprimé.
Je veux dire protégé et virtuel à la fois, et pourquoi vous voulez virtuel, là-bas ?

OriginalL'auteur ChadD | 2014-02-20