Örnek
Bazen generic olduğunu bildiğimiz bir parametrenin List, HashSet veya ne olduğunu bilmek isteriz. Her zamanki gibi önce Type nesnesini buluruz.
Bazen Generic kod içinde T parametresini bulmak isteriz. typeof() kullanarak şöyle yaparız.
Bazen generic olduğunu bildiğimiz bir parametrenin List, HashSet veya ne olduğunu bilmek isteriz. Her zamanki gibi önce Type nesnesini buluruz.
Type type = someObject.GetType();
Daha sonra generic olup olmadığını kontrol ederiz.if (currentType.IsGenericType)
{...}
Eğer istersek IEnumerable arayüzünü gerçekleştirip gerçekleştirmediğine de bakabiliriz. Nihai amacımızı ise GetGenericTypeDefinition() metodunu kullanarak nesnenin tipini bulmaktır.if (type is IEnumerable)
{
var listGenericType = type.GetType().GetGenericTypeDefinition();
if (listGenericType == typeof(List<>)) {
//do something
}
else if (listGenericType == typeof(HashShet<>)) {
//do something
}
}
ÖrnekBazen Generic kod içinde T parametresini bulmak isteriz. typeof() kullanarak şöyle yaparız.
public class BaseClass { }
public class DerivedClass: BaseClass { }
public class GenericClass<T> where T : BaseClass
{
public string TypeOf = typeof(T).ToString();
}
public class GenericSuperClass<T> where T : BaseClass
{
public GenericClass<T> Sub = new GenericClass<T>();
}
static void Main(string[] args)
{
Console.WriteLine("1 - " + (new GenericClass<BaseClass>()).TypeOf);
Console.WriteLine("2 - " + (new GenericClass<DerivedClass>()).TypeOf);
Console.WriteLine("3 - " + (new GenericSuperClass<BaseClass>()).Sub.TypeOf);
Console.WriteLine("4 - " + (new GenericSuperClass<DerivedClass>()).Sub.TypeOf);
Console.ReadLine();
}
Çıktı olarak şunu alırız1 - BaseClass
2 - DerivedClass
3 - BaseClass
4 - DerivedClass
Hiç yorum yok:
Yorum Gönder