C# Language Implémenter ICloneable dans une structure


Exemple

L'implémentation d'ICloneable pour une structure n'est généralement pas nécessaire car les structs font une copie membre avec l'opérateur d'affectation = . Mais la conception peut nécessiter l'implémentation d'une autre interface qui hérite d' ICloneable .

Une autre raison serait que la structure contienne un type de référence (ou un tableau) nécessitant une copie également.

// Structs are recommended to be immutable objects
[ImmutableObject(true)]
public struct Person : ICloneable
{
    // Contents of class
    public string Name { get; private set; }
    public int Age { get; private set; }
    // Constructor
    public Person(string name, int age)
    {
        this.Name=name;
        this.Age=age;
    }
    // Copy Constructor
    public Person(Person other)
    {
        // The assignment operator copies all members
        this=other;
    }

    #region ICloneable Members
    // Type safe Clone
    public Person Clone() { return new Person(this); }
    // ICloneable implementation
    object ICloneable.Clone()
    {
        return Clone();
    }
    #endregion
}

Plus tard pour être utilisé comme suit:

static void Main(string[] args)
{
    Person bob=new Person("Bob", 25);
    Person bob_clone=bob.Clone();
    Debug.Assert(bob_clone.Name==bob.Name);
}