Нет, это не разрешено в C #. Компилятор использует универсальное ограничение, чтобы определить, какие операции доступны в T
в универсальном методе, поэтому разрешение выражения или не будет безопасным для типа.
Если вам это нужно, рассмотрите возможность добавления интерфейса, охватывающего общие части BaseForm
и BaseMainForm
, и примените его в качестве общего ограничения. Таким образом, интерфейс определяет контракт того, что нужно методу CreateForm<T>
, и вы должны просто убедиться, что формы, которые вы передаете, реализуют интерфейс.
Что-то вроде:
public interface IBaseForm
{
Foo();
}
class BaseForm : IBaseForm {}
class BaseMainForm : IBaseForm {}
public T CreateForm<T>() where T : IBaseForm