2009-07-09 15 views

Respuesta

4

C# y CLR no son compatibles con las restricciones generales de interfaz, aunque puede restringirlo a una interfaz en particular (consulte otras respuestas). Lo más cercano que puedes obtener es 'clase' y compruebo el tipo utilizando la reflexión en tiempo de ejecución, me temo. ¿Por qué querrías una restricción de interfaz en primer lugar?

+0

Para inyección de dependencia implementada personalizada/loca, tal vez. Pero ese soy yo adivinando. – Felype

6

Si se está preguntando acerca de cómo agregar una restricción a una interfaz específica, eso es sencillo:

public void Register<T>(T data) where T : ISomeInterface 

Si se está preguntando si existe una palabra clave como clase o estructura para limitar el rango de posibles tipos de T, que no está disponible.

Si bien se puede escribir:

public void Register<T>(T data) where T : class // (or struct) 

no se puede escribir:

public void Register<T>(T data) where T : interface 
0

No se puede exigir que T es una interfaz, por lo que tendría que utilizar la reflexión en tiempo de ejecución para afirmar esto.

0

Si es posible, fui con una solución como esta. Solo funciona si desea que varias interfaces específicas (por ejemplo, aquellas a las que tiene acceso de origen) se pasen como un parámetro genérico, no cualquiera.

  • Dejo que mis interfaces, que entraron en duda, hereden una interfaz vacía IInterface.
  • que limitó el parámetro T genérica a ser de IInterface

En la fuente, que se ve así:

  • Cualquier interfaz que desea ser transferido como parámetro genérico:

    public interface IWhatever : IInterface 
    { 
        // IWhatever specific declarations 
    } 
    
  • IInterface:

    public interface IInterface 
    { 
        // Nothing in here, keep moving 
    } 
    
  • La clase en la que desea colocar el tipo de restricción:

    public class WorldPieceGenerator<T> where T : IInterface 
    { 
        // Actual world piece generating code 
    } 
    
Cuestiones relacionadas