I Metodi di Estensione C# in Unity

marcosecchi Tutorials, Unity3D 0 Comments

“I metodi di estensione consentono di “aggiungere” metodi ai tipi esistenti senza creare un nuovo tipo derivato, ricompilare o modificare in altro modo il tipo originale. I metodi di estensione sono uno speciale tipo di metodo statico, ma vengono chiamati come se fossero metodi di istanza sul tipo esteso. Per il codice client scritto in C# e Visual Basic non esistono differenze evidenti tra la chiamata a un metodo di estensione e ai metodi effettivamente definiti in un tipo.”

La citazione di sopra è tratta dalla documentazione ufficiale di Microsoft C#: ma esattamente, come è possibile applicarla in unity3D?

Le possibilità sono ovviamente molteplici ma, il più delle volte, verrà applicata per aggiungere nuove funzionalità ai componenti Unity per velocizzare alcune operazioni ripetitive nel vostro codice.

Come esempio, potrebbe capitarvi di effettuare molto spesso il re-parenting di un oggetto in una scena. Il codice sarà più o meno questo:

aGameObject.transform.parent = aParent.transform;

Probabilmente però, sarebbe meglio poter scrivere:

aGameObject.setParent(aParent);

Con i metodi di estensione è veramente semplice. Tutto quello che dovrete fare è scrivere (una sola volta) il seguente codice:

Come potete vedere, il metodo di estensione viene dichiarato come qualsiasi altro metodo, con le seguenti eccezioni:

  • Deve essere dichiarato all’interno di una classe static (non generic e non nested)
  • Deve essere static
  • Il primo argomento deve seguire una sintassi speciale (this GameObject go nel nostro esempio), e specificare su quale tipo di metodo opera

Anche se questa metodologia risulta essere molto utile, la documentazione Microsoft raccomanda di non abusarne.

Inoltre, vanno tenuti in considerazione i possibili problemi:

  • Un metodo di estensione non verrà mai chiamato, se la signature è la stessa di un metodo già esistente per il tipo
  • I metodi di estensione sono inseriti nello scope a livello del namespace