In my opinion, the best way to do this is by implementing your own Clone()
method as shown below.
class Person
{
public string head;
public string feet;
// Downside: It has to be manually implemented for every class
public Person Clone()
{
return new Person() { head = this.head, feet = this.feet };
}
}
class Program
{
public static void Main(string[] args)
{
Person a = new Person() { head = "bigAF", feet = "smol" };
Person b = a.Clone();
b.head = "notEvenThatBigTBH";
Console.WriteLine($"{a.head}, {a.feet}");
Console.WriteLine($"{b.head}, {b.feet}");
}
}
Output:
bigAf, smol
notEvenThatBigTBH, smol
b
is totally independent to a
, due to it not being a reference, but a clone.
Hope I could help!