【发布时间】:2017-02-27 02:51:57
【问题描述】:
我正在维护一些旧的 C# 代码,不能过多地更改其结构。我试图以安全的方式减少一些现有的编译器警告。某些功能给了我以下警告:
警告 CS0108 'Function(string, string)' 隐藏了继承的成员 'xyz.Function(string, string)'。如果要隐藏,请使用 new 关键字。
我认为隐藏该继承功能是故意的,因为该软件已经成功使用多年。我认为添加“new”关键字以将此函数声明为
private new void Function(string parm1, string parm2)
警告按预期消失了,但出现了这个警告:
警告 CA2222 将 'Function(string, string)' 设为非私有,将其标记为 final,或密封其声明类型。该方法最初是在基类“BaseClassName”中定义的。
除了禁止显示此警告之外,我不确定我可以使用的最安全(即不改变行为)选项是什么?我不认为我应该使这种方法成为非私有的(我认为这意味着“公共”)。我不确定如何使它最终或密封,以及这样做是否是正确的解决方案。
【问题讨论】:
-
您能否提供更多有关带有原始警告(使用新关键字...)的类及其扩展的类的详细信息?听起来最初的意图最有可能将原始功能标记为虚拟功能并将扩展功能标记为覆盖。不过,我需要更多细节才能确定。
-
可能是基类中的“受保护”函数?
-
这是上面代码隐藏的基类中的方法定义: public abstract class BaseCodeListPage
: BasePage ... protected void AddOnClientClick(string parm1, string parm2) { ... } -
...包含这个有问题的函数的类定义如下: public partial class myListPage : BaseCodeListPage
-
所以,是的,正如 Yuri 所怀疑的那样,该函数在基类中受到保护。我不确定触摸它是否安全。
标签: c# compiler-warnings