A useful attribute in .Net is Obselete. When you mark a method with this the compiler will flag any line that accesses the method (or property, or whatever) with a warning (error is optional).
I recently used it for a framework that sits between a database and applications–I wanted to faithfully reflect the database design (since it’s too dangerous to change that), but I want to be warned away from using cetain functionality unless necessary.
Example:
[Obsolete(“You shouldn’t be calling this method!”)]
public void MyMethod()
{
…
}Main()
{
   this.MyMethod();
}
The compiler will then say:
warning CS0618: [class…].MyMethod’ is obsolete: ‘You shouldn’t be calling this method!’