Дженерики C# - Ограничения на параметры типа

В зависимости от того, как Ваша функция создает случайную дату, можно также хотеть проверить на недопустимые даты: невозможные високосные годы или 31-й день 30-дневного месяца.

7
задан Michael Kniskern 16 September 2009 в 19:27
поделиться

4 ответа

Look at the Type class and GetConstructor. Once you get the ConstructorInfo object, use the Invoke Method.

var x = typeof(T);
var t = x.GetConstructor(new[] {obj.GetType()});
object u = t.Invoke(<inputs>);
4
ответ дан 6 December 2019 в 12:53
поделиться

Нет, то, что вы пытаетесь сделать, невозможно с использованием только встроенных общих ограничений. Ключевое слово new только позволяет ограничить общий тип конструктором по умолчанию.

3
ответ дан 6 December 2019 в 12:53
поделиться

Мне нравится использовать Activator.CreateInstance (typeof (T)) в моих дженериках, которым нужно создавать новые объекты типа T. Он работает очень хорошо.

5
ответ дан 6 December 2019 в 12:53
поделиться

Я не думаю, что вы можете создать экземпляры универсальных типов без конструктора по умолчанию для типа ограничения.

Вместо этого рассмотрите возможность указания интерфейса IAbstractClass, чтобы ваш фабричный класс мог установить параметр SomeClassName как свойство IAbstractClass.

Кроме того, если для инициализации AbstractClass требуется экземпляр SomeClassName, подумайте также о наличии пустого конструктора по умолчанию, но богатый метод инициализатора, определенный в IAbstractClass. Например:

public interface IAbstractClass { void Initialize(SomeClassName obj); }

Таким образом, ваш статический метод BuildObject вместо этого выполняет:

public static T BuildObject<T>(SomeClassName obj) where T: AbstractClass 
{
  T newObject = new T();
  IAbstractClass ac = newObject as IAbstractClass;
  ac.Initialize(obj);
}
4
ответ дан 6 December 2019 в 12:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: