C# является хорошим ответом здесь - он имеет справедливую сборку "мусора" (хотя необходимо было бы представить его вполне немного - для изменения способа, которым Вы обрабатываете вещи теперь, когда вся обработка памяти вне Ваших рук), он прост в использовании, имейте много примеров, и хорошо документируется. В 3D отделе это оказывает полную поддержку для программ построения теней и эффектов и так - который был бы моим выбором.
однако, C# не так эффективен как C++ и происходит медленнее из-за издержек, поэтому если это - скорость и гибкость для использования какого-либо приема в книге, Вам нравится (с указателями и блоком, если бы Вам нравится пачкать руки) - придерживаются C++, и цена записала бы пути больше кода, как Вы упомянули, но имеющий полный контроль над всем включая управление памятью.
As far as I can see, consuming code doesn't need specifics of generic class (i.e., it doesn't depends on what T
is). So, why don't you introduce interface that SomeClass
will implement, and use instance of this interface.
E.g.:
public interface ISome
{
void SomeMethod();
}
public class SomeClass<T>: ISome
{
public virtual void SomeMethod(){ }
}
public void DoSomethingClienty()
{
Factory factory = new Factory();
ISome someInstance = factory.Create();
someInstance.SomeMethod();
}
Now, subclasses of SomeClass
can operate differently on different T
s, but consuming code won't change.
Я думаю, вы неправильно понимаете смысл дженериков. Generics позволяет вам обобщить класс, которому требуется тип, но не особо заботится о том, какой это тип. Например, List
- это список строк, но что будет за List
? Довольно бесполезно иметь список из ничего.
Каждый специализированный класс (например, List
) является собственным отдельным типом , и компилятор рассматривает его как такой. Возможно получить сам общий тип (например typeof (List <>)
), но в большинстве случаев это бесполезно, и вы, конечно, не можете создать экземпляр это.
I would prefer using abstract class to act as base of all generic types.
public abstract class SomeClass
{
public abstract void SomeMethod();
}
public class SomeClass<T> : SomeClass
{
public override void SomeMethod() { }
}
public class DeriveFrom<String> : SomeClass<String>
{
public override void SomeMethod() { base.SomeMethod(); }
}