I wrote about this a few months back, and today it proved the solution to an otherwise insoluble problem yet again.

class BaseMarklar<T> where T:BaseMarklar<T> {  
	public T Self() { return (T)this; }  

class BlueMarklar : BaseMarklar<BlueMarklar> {  
	public void Frob() { ... }  

class RedMarklar : BaseMarklar<RedMarklar> {  
	public void Frizzle() { ... }  

I’ve decided to call it the “I’m My Own Grandpa” design pattern. I’ve always regarded design patterns as primarily solutions to failures of the underlying language, and hence I consider the designation appropriate here.