, örneğin birkaç şartlara uyması gerekir verilen jenerik tipi, anlamına gelen bir kısıtlamayı ekleyebilirsiniz:
where T : new()
- T
bir kamu parametresiz yapıcı olması gerekir (veya bir struct
olmak)
where T : class
- başka T
bir değer tipi olmalıdır (- T
referans tipi (class
/interface
/delegate
)
where T : struct
olmalıdır
where T : SomeBaseType
) Nullable<TSomethingElse>
daha - - T
SomeBaseType
(veya SomeBaseType
kendisi) tarafından erişilebilir olmalıdır
where T : ISomeInterface
T
örneğin ISomeInterface
uygulamalıdır:
public void SomeGenericMethod<T>(T data) where T : IEnumerable {
foreach(var obj in data) {
....
}
}
bu SomeBaseType
ve ISomeInterface
olduğu Burada ilginçtir, çünkü onlar (ve kullanım) Bu türler üzerinde tanımlanmış olan - örneğin, where T : IList
, Add(...)
vb. erişim sağlar. HOWEVER!basitçe: gibi şeyler için böyle bir mekanizma yoktur: parametrelerle
- yapıcıları
- statik yöntemler
- keyfi yöntemler baz tipi veya arayüz
yoluyla tanımlanmayan/dönüşümler
operatörler Yani: Onlara talep edemezsiniz ve bunları kullanamazsınız (yansıma dışında). Ancak bunlardan bazıları için dynamic
kullanılabilir. Bir programda,
interface IWithStatic
{
void DoIt(); // non-static
static void DoItStatic(); // static
}
class C1 : IWithStatic
{
void DoIt() {} // non-static
static void DoItStatic(){} // static
}
class C2 : IWithStatic
{
void DoIt() {} // non-static
static void DoItStatic(){} // static
}
Ve:
iyi bir açıklama. – Idrees