Maybe Charles Petzold is more correct than I gave him credit for with my knee-jerk reaction. Using the RTM version of VS2005, I was writing some code to inherit from KeyedCollection from System.Collections.ObjectModel. KeyedCollection is abstract and there is an abstract method named GetKeyForItem which you must implement in your derived class. Using my very cool intellisense feature, I started typing the override and here's what it generated for me by default...
protected override int GetKeyForItem(int item)
{
throw new Exception("The method or operation is not implemented.");
}
Yuck! If you read the Framework Design Guidelines or the SLAR Volume 1, you'll see annotations that suggest that System.Exception should be treated like an abstract class. You should not throw System.Exception and you should almost never catch System.Exception. So why is the IDE throwing a System.Exception instead of a NotImplementedException? Boo! :-)