- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在维护一些旧的 C# 代码,不能对它的结构进行太多更改。我试图以一种安全的方式减少一些现有的编译器警告。某些功能给了我以下警告:
Warning CS0108 'Function(string, string)' hides inherited member 'xyz.Function(string, string)'. Use the new keyword if hiding was intended.
我认为隐藏继承的功能是有意为之,因为该软件已经成功使用了很多年。我认为添加“new”关键字使这个函数声明为没有坏处
private new void Function(string parm1, string parm2)
警告按预期消失了,但是这个警告出现了:
Warning CA2222 Make 'Function(string, string)' non-private, mark it as final, or seal its declaring type. This method was originally defined in base class 'BaseClassName'.
除了抑制此警告外,我不确定对我来说最安全(即非行为改变)的选项是什么?我认为我不应该将此方法设为非私有(private)(我认为这意味着“公共(public)”)。我不确定如何使其最终或密封,以及这样做是否是正确的解决方案。
最佳答案
除非可以通过反射访问此方法,否则删除“new”关键字然后重命名它(也更改任何调用站点)。该方法无论如何都是私有(private)的,因此它只能在同一个类中使用,除非它由委托(delegate)传递(那么名称无关紧要)或者如果使用反射来访问它。
在假设代码正确的情况下,任何对该方法的调用都是有意的。尽管我会检查它们并检查调用站点是否调用了错误的方法是否有任何错误。
对方法可见性的任何更改都是有问题的,因此请避免这样做※。关于制作类(class)sealed
,这也是一个重大变化,因为可能存在继承类的第三方代码,所以也要避免这种情况。
※:可见性降低最严重,因为可能存在使用该成员的第三方代码,因此这是一个重大变化。增加可见性(例如使私有(private)方法 protected 或公开)可能会破坏类型的封装,公开成员可能会允许第三方代码扰乱该类型对象的状态,因此请谨慎。
关于c# - 使 c# 函数成为非私有(private)函数,将其标记为最终函数,或密封其声明类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40097943/
当数据类扩展包含非抽象 open val 属性的密封类时,生成的子数据类包含与父类的私有(private)字段重复的私有(private)字段。 sealed class Foo(open val f
当封装一个.jar 文件(整个.jar,而不是特定的包)时,实际上封装了哪些包?它只是包含.class 文件的包,还是还包含父包和子包? 举个例子,假设我有一个包含单个 .class 文件 com.c
我可以很容易地为这样的密封案例类族一般派生一个编解码器: import io.circe._ import io.circe.generic.auto._ sealed trait Base case
我有一个类层次结构: class C1 { virtual object M1(); } class C2: C1 { override sealed object M1(); } class C3:
有什么区别: type MovieType = {| +blob?: string, +name: string, +url?: string |}; 和 type MovieType =
想象一个这样的 secret : apiVersion: v1 kind: Secret metadata: name: {{ include "test-cicd.fullname" . }}
因此,我的一位开发人员使用这样的函数为 Magento 电子商务网站制作自定义导航: getUrl() ?>">__('about') ?> 唯一的问题是它的输出如下: about 据我了解,如果同时
我是一名优秀的程序员,十分优秀!