ins*_*elf 2 c# idisposable c#-4.0
我正在看这个规则,它说应该保护终结器,我们应该将保护修改器添加到Finalizer.
我完全困惑,因为我很确定我无法修改析构函数以获得受保护的修饰符.
如果这是编译器自动处理的东西,当它没有明显提及时,并且规则的修复明确指出使用protected关键字修改Finalizer(没有意义).
我是否正确地说我无法使用任何修饰符修改Finalizer,因为Object类中的Finalize方法会被析构函数自动调用?
与CA2220相同的问题:终结器应该调用基类终结器 这说我应该从派生类调用基本的终结器,但据我所知,基本的终结器在Object类的Finalize方法中自动调用,我甚至不用担心那.我对吗?
此规则不应适用于您编写的任何C#代码.终结器的访问修饰符由编译器控制,并且在受保护时正确发出.只有本身发出IL的程序才会违反此规则.这在MSDN页面的备注部分中注明
备注
任何高级.NET语言都不能违反此规则; 如果您正在编写Microsoft中间语言,它可能会被违反.
相同的基本逻辑适用于CA2220.C#编译器将自动插入对基本终结器的调用,并且无法阻止它.然而,还有其他语言,如VB.Net,它们不这样做,CA2220适用于它们.
注意:如果您试图验证我在反射器中对C#终结器的说法,请确保查看IL而不是反汇编代码.Reflector将在反编译代码视图中隐藏基本终结器调用,但不会隐藏IL
| 归档时间: |
|
| 查看次数: |
75 次 |
| 最近记录: |