What Writing Custom Generic Classes in C# Is - and What it Is Not