Metaclasses sind ja eigentlich nix weiter als Factories, die außerdem alle Class-Member als Instance-Member haben.
C#'s Philosophie ist ja alles so einfach wie möglich zu machen. Und Features, die sich genauso gut durch Libraries lösen lassen, werden nicht in die Sprache aufgenommen.
Für dein konkretes Beispiel gibt es allerdings eine Syntax:
Code:
public class MyList<T>
where T: new(), MyListElement
{
...
public T AddOneElement()
{
var item = new T();
item.SomeMethodFromTMyListElement(); // Das behagt mir nicht
Items.Add(item);
return item;
}
}
Man kann Typenparameter darauf einschränken, dass sie Klassen oder Structs sein müssen. Oder dass sie von einem bestimmten Typen ableiten.
Außerdem gibt es die Constraint "new()", was heißt, dass dein T einen öffentlichen Konstruktor ohne Parameter haben muss.