C# ile metodlara genel tipte değişkenler gönderme ve metodlardan genel tipte dönüş değerleri alma
XML serialize/deserialize ile uğraşırken XML’den nesneye ve nesneden XML dönüşümde XmlSerializer sınıfına işlemde kullanılacak hedef veya kaynak nesnenin tipini vermek gerekiyor. Tabi işimi halletmeye odaklandığımdan o adımda kullandığım nesnenin tipini verdim ve casting ile işimi hallettim üstüne fazla düşünmeden. Fakat daha sonra işimi tamamlayınca kodun üzerinden geçerken o kısımda acaba bu işi her sınıf için genel bir hale getirebilir miyim acaba diye düşünürken rastladığım bir örnek çuk oturdu istediğim şeye ![]()
Öncelikle bir metoda genel (generic) tipte bir değişken gönderme ve bu metodu kullanma üzerine bir örnek kod parçası vereyim:
public static string Serialize<T>(T obj, Encoding encoding) { ... // gerekli olan yerde typeof(T) ile // obj nesnesinin tipine ulaşılabilir } ... string xml = Serialize(obj, encoding, noNameSpace, noXmlDecleration);
Görüldüğü üzere metoda genel tipte sınıfın nesnesini gönderirken ek bir tanımlama yapmaya gerek kalmadan direk metodu ilgili nesneyi parametre olarak göndererek çağırarak kullanabiliyoruz.
Metodtan genel tipte bir nesne almak için ise biraz farklı bir yol izlememiz gerekli:
public static T Deserialize<T>(string xml, Encoding encoding) { ... if(condOk) { return (T)anObj; } else { return default(T); // can not return null } } ... MyClass obj = Deserialize<MyClass>(xml, encoding);
Görüldüğü gibi tanımlama benzer olsa da dönüş tipini genel tanımlayınca kullanırken bunu metoda bir şekilde iletmek gerekiyor, onu da görüldüğü üzere metodu çağırırken <> arasına dönüş tipini vererek gerçekleştiriyoruz (tanıdık geldi mi? List<> desem?
). Metodun tanımlamasında bir diğer önemli nokta dönülen nesnenin genel tipe cast edilmesi gerektiği ve dönüş değeri olarak null dönülemeyeceği, null yerine default(T) şeklinde dönüş yapmanız gerekli.



