我不明白为什么这段代码会给我一个Intellisense错误。
在上面指定的行中,我遇到了错误:
Error CS1540:不能通过类型为“Node”的限定符访问受保护成员“Node.ToText()”;限定符必须是类型为“HtmlNode”(或其派生类)。 HtmlNode 是 Node 的一个派生类,为什么 HtmlNode 不能访问 Node 的受保护成员?
如何修改代码以使用“类型为 HtmlNode 的限定符”,正如错误消息中建议的那样?
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:不能通过类型为“Node”的限定符访问受保护成员“Node.ToText()”;限定符必须是类型为“HtmlNode”(或其派生类)。 HtmlNode 是 Node 的一个派生类,为什么 HtmlNode 不能访问 Node 的受保护成员?
如何修改代码以使用“类型为 HtmlNode 的限定符”,正如错误消息中建议的那样?
Node
子类,并且应该能够访问所有这些子类共同拥有的方法。你的解决方法只适用于HtmlNode
类型的节点。这不是我需要的。 - Jonathan Woodnode
不是HtmlNode
,那么它会崩溃。 - Yeldar KurmangaliyevHtmlNode
确实是实现抽象的类。为什么派生类不能访问基类的受保护成员? - Jonathan Wood