gpt4 book ai didi

c# - 使 c# 函数成为非私有(private)函数,将其标记为最终函数,或密封其声明类型

转载 作者:行者123 更新时间:2023-11-30 12:56:38 25 4
gpt4 key购买 nike

我正在维护一些旧的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com