Merhaba hocam;
Hazırladığınız bu dokümantasyondan oldukça faydalanmaktayım, sunduğunuz bilgi paylaşımı için teşekkür ediyorum.
Prototype Design Pattern ile ilgili birkaç araştırma daha yaptım.
Ve anladığım kadarıyla verdiğiniz örnek şu an aslında Shallow Copy yapmakta.
Employee class' ına property olarak bir class verdiğimizde bu anlaşılmış olacak.
class Employee : IClonablePrototype<Employee>
{
string firstName;
string lastName;
public Address Address { get; set; }
public Employee(string firstName, string lastName, Address address)
{
this.firstName = firstName;
this.lastName = lastName;
this.Address = address;
}
public Employee Clone()
{
return base.MemberwiseClone() as Employee;
}
}
public class Address
{
public string Country { get; set; }
public string City { get; set; }
}
Program.cs'de şu şekilde
static void Main(string[] args)
{
Employee gulizar = new Employee("Gülizar", "Yılmaz", new Address { Country ="Türkiye", City = "İstanbul"});
Employee cloneGulizar = gulizar.Clone();
// Aynı nesne örneklerini farklı referanslarda tutuyor.
// Birbirinin aynısı ve farklı referanslarda olan nesneler elde ettik.
Console.WriteLine(gulizar == cloneGulizar);
Console.WriteLine(gulizar.Address == cloneGulizar.Address);
}
- Console.WriteLine ' de true olarak geleceği görülecektir. Bu da yapılan işlemin Shallow Copy olduğunu göstermektedir.
Şu şekilde modeli revize edersek Deep Copy ' e ulaşırız.
class Employee : IClonablePrototype<Employee>
{
string firstName;
string lastName;
public Address Address { get; set; }
public Employee(string firstName, string lastName, Address address)
{
this.firstName = firstName;
this.lastName = lastName;
this.Address = address;
}
public Employee Clone()
{
Employee employee = base.MemberwiseClone() as Employee;
employee.Address = Address.Clone();
return employee;
}
}
public class Address : IClonablePrototype<Address>
{
public string Country { get; set; }
public string City { get; set; }
public Address Clone()
{
return base.MemberwiseClone() as Address;
}
}
Merhaba hocam;
Hazırladığınız bu dokümantasyondan oldukça faydalanmaktayım, sunduğunuz bilgi paylaşımı için teşekkür ediyorum.
Prototype Design Pattern ile ilgili birkaç araştırma daha yaptım.
Ve anladığım kadarıyla verdiğiniz örnek şu an aslında
Shallow Copyyapmakta.Employee class' ına property olarak bir class verdiğimizde bu anlaşılmış olacak.
Program.cs'de şu şekilde
Şu şekilde modeli revize edersek
Deep Copy' e ulaşırız.