Я бы определенно выбрал интерфейс, а затем универсальный тип (или универсальные методы) вместо того, чтобы делать что-то по-настоящему динамически, если это возможно. Если ваш автоматически сгенерированный код использует частичные классы, это действительно легко сделать - просто напишите интерфейс вокруг того, что у вас есть, а затем добавьте новый файл с:
public partial class BenefitType : ICommonType {}
public partial class OtherType : ICommonType{}
// etc
Тогда вы можете написать:
public class LookupForm<T> : Form where T : ICommonType, new()
и тебя нет. Недостатком является то, что дизайнер не очень доволен универсальными типами.
Если вам нужно использовать , основываясь только на имени типа, вы все равно можете сделать это:
string objectType = "Namespace.Models.BenefitType";
Type type = Type.GetType(objectType);
Type formType = typeof(LookupForm<>).MakeGenericType(type);
Form form = (Form) Activator.CreateInstance(formType);
Вы возможно хотите создать абстрактную неуниверсальную форму между LookupForm<T>
и Form
, которую вы можете использовать строго типизированным способом, но которая не имеет ничего общего с T
, Это зависит именно от того, что вам нужно сделать.