Tak, deklaracje typów mogą być długie.
Weźmy sobie typ na przykład:
public class ThreeGradeRa : RiskAssessment<ThreeGradeRiskRowAssessmentModel>, IRiskAssessment
Mamy tu po prostu generyka, który jest niczym innym jak headerem z listą, przy czym jeszcze ma jakiś interfejs. To jeszcze nic. Chcecie zobaczyć jaki potworek utworzyłam dla RiskAssessment<T>? Tam to dopiero magia:p
public class RiskAssessment<T> : BindingList<T> where T : RiskAssessmentRowModel
Oczywście po dwukropku można podać klasę, można podać interfejsy, można też podać dziwne konstrukcje typu where T: struct – jeśli parametr ma być value type (niekoniecznie strukturą), albo T : class – jeśli parametr ma być typu generycznego. Jest też taki twór jak where T : new() – czyli wymuszenie, że typ ma mieć konstruktor bezparametrowy. Można to łączyć, wystarczy wymienić parametry jak człowiek, po przecinku. where T : IDupable, new() chociażby.
A przy kilku parametrach (bo i tak się da):
class DoubleBlasta<T, Tdwa> where T : IComparable, IEnumerable, where Tdwa: IWtfable, new() {cośtam}
Tak tylko dodam, że to new() musi być na końcu, acz na msdnie o tym nie ma. Albo ja tu nie widzę.
Tak czy owak, przestałam się tych generyków bać;)
Ok, miało być dłużej i ładniej, ale się późno zrobiło.