design patterns c# interview questions