Cevap Geçmişi
«« Soruya geri dön
12.04.16 13:28
Şuradan  öğrendiğime göre  Code Project 'de bulunan alttaki örnek  ICloneable  arayüzünü kullanmadan yani her sınıfımızda bunu uygulamak zorunda kalmadan serileştirme yoluyla klonlama yapıyor. Biraz kısaltıp Türkçeleştirdim. /// Nesneleri derin kopyalama yapan bir metod. /// Koplamala için ikili serileştirmeyi (Binary Serialization) kullanır. public static class ObjectCopier {     public static T Clone<T>(T source)     { 		// Serileştirilemeyen sınıfların örnekleri için hata döndür.         if (!typeof(T).IsSerializable)         {             throw new ArgumentException("Tip serileştirilebilir olmalıdır.", "source");         }         // null'u serileştirmeye çalışma, karşılığında tipin varsayılan         // değerini döndür.         if (Object.ReferenceEquals(source, null))         {             return default(T);         }         IFormatter formatter = new BinaryFormatter();         Stream stream = new MemoryStream();         using (stream)         {             formatter.Serialize(stream, source);             stream.Seek(0, SeekOrigin.Begin);             return (T)formatter.Deserialize(stream);         }     } } Kullanım örneği: // abc metnini içeren bir StringBuilder oluştur ve klonla StringBuilder sb = new StringBuilder("abc"); StringBuilder sbc = ObjectCopier.Clone<StringBuilder>(sb); Console.WriteLine(sb.ToString()); Console.WriteLine(sbc.ToString()); Çıktı: abc abc
Ekleyen: cevapsitesi
Değiştiren: cevapsitesi
Cevap olarak seçen: canora
12.04.16 10:27
Şuradan  öğrendiğime göre  Code Project 'de bulunan alttaki örnek  ICloneable  arayüzünü kullanmadan yani her sınıfımızda bunu uygulamak zorunda kalmadan serileştirme yoluyla klonlama yapıyor. Biraz kısaltıp Türkçeleştirdim. /// Nesneleri derin kopyalama yapan bir metod. /// Koplamala için ikili serileştirmeyi (Binary Serialization) kullanır. public static class ObjectCopier {     public static T Clone<T>(T source)     { 		// Serileştirilemeyen sınıfların örnekleri için hata döndür.         if (!typeof(T).IsSerializable)         {             throw new ArgumentException("Tip serileştirilebilir olmalıdır.", "source");         }         // null'u serileştirmeye çalışma, sen de null gönder         if (Object.ReferenceEquals(source, null))         {             return default(T);         }         IFormatter formatter = new BinaryFormatter();         Stream stream = new MemoryStream();         using (stream)         {             formatter.Serialize(stream, source);             stream.Seek(0, SeekOrigin.Begin);             return (T)formatter.Deserialize(stream);         }     } } Kullanım örneği: // abc metnini içeren bir StringBuilder oluştur ve klonla StringBuilder sb = new StringBuilder("abc"); StringBuilder sbc = ObjectCopier.Clone<StringBuilder>(sb); Console.WriteLine(sb.ToString()); Console.WriteLine(sbc.ToString()); Çıktı: abc abc
Ekleyen: cevapsitesi
 
En fazla 3 eski durum gösterilir.