Musing About Generic Inheritance (Class Person : EntityBase).. What?
July 21. 2009
0 Comments
Was strolling around StackOverflow and came to a question #1118232. Where this guy was asking how come you can create a class inheriting from another generic class like so:
class Person : EntityBase<Person>
{
//Whatever here...
}
He said it’s like the chicken and egg problem :) Which I sort of agree. After pondering on the thing for a bit, I tried mucking around with it in Visual Studio and came up with this that I think sort of give me a bit more clarification on the idea, but not by much… Still trying to find when I need to really use something like this. And the code that I came up with is this:
class Program
{
static void Main(string[] args)
{
var wife = new Human(Gender.Female);
var baby = wife.GiveBirth();
Console.WriteLine(baby.Gender);
Console.ReadKey();
}
}
class CanGiveBirthTo<T> where T : new()
{
public CanGiveBirthTo()
{
}
public T GiveBirth()
{
return new T();
}
}
class Human : CanGiveBirthTo<Human>
{
public Gender Gender { get; private set; }
public Human(Gender gender)
{
Gender = gender;
}
public Human()
{
Gender = RandomlyAssignAGender();
}
Gender RandomlyAssignAGender()
{
var rand = new Random();
return (Gender) rand.Next(2);
}
}
enum Gender
{
Male = 0,
Female = 1
}
I don’t know if this is of any use to anyone…, but enjoy… LoL.
Any idea what sort of real application code that could fall into this pattern in real project?