Подтвердить что ты не робот

"where" ключевое слово в объявлении класса в c sharp

Может ли кто-нибудь помочь мне с линией where TEntity : class, IEntity, new() в следующем объявлении класса.

public abstract class BaseEntityManager<TEntity>
        where TEntity : class, IEntity, new()
4b9b3361

Ответ 1

where TEntity : ... применяет ограничения к общему параметру TEntity. В этом случае ограничения:

class: аргумент TEntity должен быть ссылочным типом
IEntity: аргумент должен быть или реализовывать интерфейс IEntity
new(): Аргумент должен иметь открытый конструктор без параметров

От http://msdn.microsoft.com/en-us/library/d5x73970.aspx

Ответ 2

Ключевое слово where после объявления класса ограничивает тип типичного TEntity. В этом случае TEntity должен быть классом (это означает, что он не может быть типом значения, например int или DateTime), и он должен реализовать интерфейс IEntity. Ограничение new() указывает, что методы внутри этого класса имеют возможность вызвать конструктор по умолчанию для общего класса, представленный TEntity (например, new TEntity())

Ответ 3

Где ограничение общего типа. Эти строки читают, что тип TEntity должен быть ссылочным типом, а не типом значения, должен реализовывать интерфейс IEntity и должен иметь конструктор, который не принимает никаких параметров.

http://msdn.microsoft.com/en-us/library/bb384067.aspx

Ответ 4

Какой вопрос?

Позвольте мне принять во внимание то, что я думаю, вопрос. Ограничение гарантирует, что вы можете подклассифицировать BaseEntityManager с общим параметром, который является ссылочным типом, реализующим IEntity и содержащим конструктор без параметров.

E.X.

public class Product : IEntity {
  public Product() {}
}

public class Wrong {
  public Wrong() {}
}

public class WrongAgain : IEntity {
   private Wrong() {}
}


// compiles
public ProductManager : BaseEntityManager<Product> {}


// Error - not implementing IEntity
public WrongManager : BaseEntityManager<Wrong> {}


/ Error - no public parameterless constructor
public WrongAgainManager : BaseEntityManager<WrongAgain> {}

см. текст ссылки