なぜこのコードでIntellisenseエラーが発生するのか理解できません。行で派生クラスの保護されたメソッドにアクセスできません
public abstract class Node
{
protected abstract string ToText();
}
public class HtmlNode : Node
{
public List<Node> ChildNodes { get; set; }
protected override string ToText()
{
StringBuilder builder = new StringBuilder();
foreach (var node in ChildNodes)
builder.Append(node.ToText()); // <=== THIS IS THE ERROR
return builder.ToString();
}
}
私はエラーを取得し、上に示した:
Error CS1540: Cannot access protected member 'Node.ToText()' via a qualifier of type 'Node'; the qualifier must be of type 'HtmlNode' (or derived from it)
HtmlNode
がNode
から派生し、そのNode
のなぜできないHtmlNode
アクセス保護されたメンバー?
"HtmlNode
タイプの修飾子"を使用するようにコードを修正するにはどうすればよいですか?
問題は、Childnodesのリストが抽象ノードのリストであることです。それは意味をなさない。抽象Nodeクラスは、HTMLNODEクラスのように実装する必要があります。それを見るには子ノードをリストに変更する ... –
@JohnPeters:私は抽象化を使用しているので、それは完璧な意味合いがあると主張します。私は 'Node'のいくつかのサブクラスを持つことができ、それらのすべてに共通のこのメソッドにアクセスできるはずです。あなたの回避策は 'HtmlNode'型のノードでしか動作しません。それは私が必要とするものではありません。 –
@AzarShaikh 'node'が' HtmlNode'でない場合、クラッシュします。 –