design patterns in c and net