The I'm-My-Own-Grandpa Design Pattern


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.