Extending SMO Classes with Extension Methods and IEnumerable(T)
One of the simplest ways to audit changes to a table is to have a trigger that stores a copy of any row that's inserted/updated/deleted, together with some meta data such as who made the change and when they made it. There are limitations (such as several types which can't be used in the inserted and deleted tables) but often this method of auditing will be sufficient.
Because of the limitations, you will normally need to specify a column list in your trigger, and this list needs to be kept up to date if the table being audited is ever changed.
While building a tool to keep audit triggers and audit tables in synch with the tables being audited, I recently found myself trying to inherit from various sealed SMO classes. Having discovered that this was impossible, I tried a different tack: extending the SMO classes with .NET 3.5 extension methods.
As ScottGu's examples show, extension methods can be extremely simple.
I added a simple method to the Column class to expose whether the column's type was available in the inserted and deleted tables (i.e. whether the audit trigger could use it), then extended the Table class to expose a collection of these auditable columns.

The solution is actually extremely simple, but I found very little written about using IEnumerable or IEnumerable(T) within an extension method. That may be because it's so straightforward that no-one has written about it, but hopefully someone will find this useful...
One thing which would be nice in a future .NET release is extension properties - both the methods mentioned above would be more satisfactory if they were properties.