今天早些时候,我在对工作中的一些代码进行代码分析时遇到了CA1063 。
我有两个问题:
为什么下面的代码即使明显违反了一些要求也不会导致CA1063(例如Dispose被覆盖)
导致具有由密封的 Dispose() 和终结器等调用的虚拟 Dispose(bool) 的复杂方案的代码的实际问题是什么......
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Foobar : IDisposable { public Foobar() { Console.Out.WriteLine("Constructor of Foobar"); } public virtual void Dispose() { Console.Out.WriteLine("Dispose of Foobar"); GC.SuppressFinalize(this); } ~Foobar() { Console.Out.WriteLine("Finalizer of Foobar"); } } class Derived : Foobar { public Derived() { Console.Out.WriteLine("Constructor of Derived"); } public override void Dispose() { Console.Out.WriteLine("Dispose of Derived"); GC.SuppressFinalize(this); base.Dispose(); } ~Derived() { Console.Out.WriteLine("Finalizer of Derived"); } } class Program { static void Main() { Console.Out.WriteLine("Start"); using (var foo = new Derived()) { Console.Out.WriteLine("..."); } Console.Out.WriteLine("End"); } } }