using System; class Person { public string Name { get; set; } public int Age { get; set; } public Address Address { get; set; } public Person Clone() { return new Person { Name = this.Name, Age = this.Age, Address = this.Address.Clone() }; } } class Address { public string Street { get; set; } public string City { get; set; } public string ZipCode { get; set; } public Address Clone() { return new Address { Street = this.Street, City = this.City, ZipCode = this.ZipCode }; } } class Program { static void Main(string[] args) { Person person1 = new Person { Name = "John", Age = 25, Address = new Address { Street = "123 Main St", City = "Anytown", ZipCode = "12345" } }; Person person2 = person1.Clone(); person2.Name = "Sarah"; person2.Address.Street = "456 Elm St"; Console.WriteLine("Person 1:"); Console.WriteLine($"Name: {person1.Name}"); Console.WriteLine($"Age: {person1.Age}"); Console.WriteLine($"Address: {person1.Address.Street}, {person1.Address.City}, {person1.Address.ZipCode}"); Console.WriteLine(); Console.WriteLine("Person 2:"); Console.WriteLine($"Name: {person2.Name}"); Console.WriteLine($"Age: {person2.Age}"); Console.WriteLine($"Address: {person2.Address.Street}, {person2.Address.City}, {person2.Address.ZipCode}"); } }In this example, we have a Person class that contains a Name, Age, and Address property. The Address property is of type Address, which also has several properties. We create an instance of the Person class and set its properties, including the Address object. We then call the Clone method to create a deep copy of the object. We modify the Name and Street properties of the copied object and display both objects to the console. The package library used in this example is the built-in System library.