Si bien entiendo los tipos genéricos <T> y la cláusula where para la restricción, estaba confundido acerca del siguiente código de la plantilla de Unity Tower Defense:
public abstract class Singleton<T> : MonoBehaviour where T : Singleton<T>¿Cuál es el propósito de restringir el tipo para que sea él mismo?
Te impide hacer esto:
public class A { } public class B : Singleton<A> { }Obtendrá un error de compilación. Debido a la restricción de tipo, debe escribir:
public class A : Singleton<A> { }En la parte superior de mi cabeza, un posible beneficio de esto es permitir que los métodos devuelvan el tipo específico. Esto se hace mediante métodos de estilo fluido . Otro ejemplo, obviamente no aplicable al ejemplo que publicaste, es un método Copy() que devuelve una copia del objeto como el tipo derivado en lugar de como su tipo base. Las firmas de método de la clase Singleton< T> que publicaste probablemente muestren dónde usa el parámetro T y probablemente insinúen la razón por la que usa este patrón.