无法访问派生类中的受保护方法(Unable to access protected method in derived class)
我不明白为什么这段代码给我一个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(); } }
在上面指出的行上,我得到错误:
错误CS1540:无法通过类型为“节点”的限定符访问受保护的成员'Node.ToText()'; 限定符必须是'HtmlNode'类型(或从中派生)
HtmlNode
派生自Node
,那么为什么HtmlNode
不能访问Node
受保护成员?如何修改代码以使用错误消息中建议的“
HtmlNode
类型HtmlNode
” ?I don't understand why this code gives me an Intellisense error.
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(); } }
On the line indicated above, I get the error:
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
derives fromNode
, so why can'tHtmlNode
access protected members ofNode
?And how would I modify the code to use "a qualifier of type
HtmlNode
", as suggested in the error message?
原文:https://stackoverflow.com/questions/45025041
最满意答案
正确的javadoc应该有第二行和后面的行,通过addtional空格缩进,描述应该在任何标记之前:
/** * Description. * @author me */
I solved it using //NOPMD (which ignores the PMD warning) on the local class line, as it wasn't my class and PMD didn't recognize the comment. It is the only solution I got.
class LocalClass implements OtherClass{ //NOPMD }
相关问答
更多-
它创建了一个匿名类 。 请注意,在匿名类中,可以从方法的早期代码中引用最终局部变量,包括最终参数: final String name = getName(); Thread t = new Thread(new Runnable() { @Override public void run() { System.out.println(name); } }); t.start(); 变量的值传递给匿名类的构造函数。 这是一种弱关闭形式(由于限制而弱化:只有值被复制,这就是 ...
-
在Ruby中,类声明只是代码块,按顺序执行。 重要的是要记住,在类定义内部, self指向类本身。 validates是ActiveRecord的类方法。 当类正在被定义时,定义中的代码被执行。 validates方法解析为ActiveRecord的类方法,因此在类定义期间调用。 在你的Person例子中,它只会打印一次,因为你只定义一次类。 考虑以下: class Foo def self.validates_nothing(sym) (@@syms ||= []) << sym pu ...
-
如果编译器拒绝内联在类的主体中内联定义的某个成员函数,或者被定义为类的主体外部的inline函数,则编译器将在每个.obj文件中插入该函数的编译版本。使用该功能。 请注意,这与插入标头中声明的每个函数的编译版本不同。 有问题的文件必须调用(据称)内联函数。 是的,链接器将删除重复的条目。 符号表中为这些内联函数生成的符号具有弱连接。 与未内联的函数相比:它们具有正常的链接,如果其中一个被复制,则您具有未定义的行为。 典型的反应是链接器抱怨然后死亡。 If the compiler rejects inlin ...
-
方法内的PMD类定义(PMD Class definition inside method)[2021-08-11]
正确的javadoc应该有第二行和后面的行,通过addtional空格缩进,描述应该在任何标记之前: /** * Description. * @author me */ I solved it using //NOPMD (which ignores the PMD warning) on the local class line, as it wasn't my class and PMD didn't recognize the comment. It is the only solution ... -
您可能需要在Ruby中使用instance_variable_set , instance_variable_get和其他方法进行元编程。 老实说,这就是attr_accessor在引擎盖下使用的。 下面的代码使用define_singleton_method向您调用add_var方法的对象添加单例方法: class Object def addvar(name, value = nil) instance_name = "@#{name}" instance_variable_set ...
-
编写自定义pmd规则,检查方法后面没有链接方法?(writing custom pmd rule that checks for method not followed by chained method?)[2021-05-18]
请不要双重发帖。 线程关闭。 继续http://sonarqube.15.x6.nabble.com/Write-a-custom-XPath-task-that-looks-for-a-method-that-is-NOT-followed-by-a-chained-方法调用,td5024017.html Please, do not double post. Thread closed. Continuing at http://sonarqube.15.x6.nabble.com/Write-a-cu ... -
如果some_data正好是create_default_data的输出(假设后者在你的调用环境中是确定的)那么为什么不将some_data ? class SomeConcreteClass(object): @property def some_data(): return 'Foo' 或者,但不等效,您可以为__init__每个实例初始化some_data 。 If some_data is exactly the output of create_default_d ...
-
您可以使用PMD编写新规则。 在您的情况下,新的XPath规则足以快速检查AST(抽象语法树)并执行您需要的检测。 替代文字http://pmd.sourceforge.net/images/designer_screenshot.png 因此,您可以声明新的规则集 ,并将它们与您的PMD插件一起集成到您的eclipse中 。 注意: PMD代表很多东西 ;) 我们一直试图找到PMD字母的含义 - 坦率地说,我们并不知道。 我们只是认为这些字母听起来很合适。 相当多 项目混乱探测器 项目监督指令 项目符合截 ...
-
可以使用IgnoreJUnitCompletely属性在版本中解决测试方法的特定问题。