Yazılım.
CevapSitesi.com Beta!
Çözüm Noktası
Facebook, Twitter, Google+ veya e-posta ile paylaşın.
| Sorular | Makaleler | Üyeler | Etiketler  | İletişim
Soru sormak ya da cevap vermek için;
giriş yapın veya üye olun.

Sosyal medya hesaplarınızla da giriş yapabilirsiniz.

Yazılım Soruları

0

C#'da bir nesneyi nasıl klonlayabilirim?

Bazen oluşturduğum bir nesnenin ikizini oluşturmak gerekiyor. Bunu yeni bir örnek oluşturup özellikleri tek tek kopyalayarak yapıyorum. Ancak biraz karışık bir sınıfda hiç bir zaman tam olarak yapıp yapmadığımdan emin olamıyorum.

Kesin ve örneğin kullandığı nesnelerle beraber derin kopyalama yapan bir kod var mı?




Soran:12.04.16 13:12
misafir  

1 Cevap

0
Ş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


Cevaplayan: 12.04.16 10:27
cevapsitesi
102,034p 15ü
Cevabı seçen: 08.06.16 00:02
canora
101,387p 4ü