Эта строка:
ChildClass blah = ChildClass.GetSomething();
компилируется в точно такой же IL как эта строка:
ChildClass blah = ParentClass.GetSomething();
(когда ChildClass
не объявляет собственный метод GetSomething
).
Я бы предпочел:
ChildClass blah = ParentClass.GetSomething<ChildClass>();
Это похоже на вашу версию приведения, но с угловыми скобками и именем типа после, а не перед именем метода :) (По сути, предложение Джейсона, теперь я его видел!)
Однако теперь это несколько не зависит от ParentClass
- вы можете определить его где угодно:
public static class FactoryUtil
{
public static T CreateInstance<T>() where T : ParentClass
{
...
}
}
... или вы могли бы предоставить фабрику в качестве зависимости, где вам это нужно, что делает вещи более тестируемыми, потенциально ...