2011-06-03 13 views
38
class Sample<T> : IDisposable // case A 
{ 
    public void Dispose() 
    { 
     throw new NotImplementedException(); 
    } 
} 

class SampleB<T> where T : IDisposable // case B 
{ 
} 

class SampleC<T> : IDisposable, T : IDisposable // case C 
{ 
    public void Dispose() 
    { 
     throw new NotImplementedException(); 
    } 
} 

La caja C es la combinación de la caja A y la caja B. ¿Es eso posible? ¿Cómo hacer el caso C correcto?¿Cómo defino una clase genérica que implementa una interfaz y restringe el parámetro de tipo?

Respuesta

58

Primero las interfaces implementadas, a continuación, las limitaciones de tipo genérico separados por where:

class SampleC<T> : IDisposable where T : IDisposable // case C 
{  //      ↑ 
    public void Dispose() 
    { 
     throw new NotImplementedException(); 
    } 
} 
5
class SampleC<T> : IDisposable where T : IDisposable // case C 
{  
    public void Dispose()  
    {   
     throw new NotImplementedException();  
    } 
} 
2
class SampleC<T> : IDisposable where T : IDisposable 
{ 
... 
} 
4

Usted puede hacerlo de esta manera:

public class CommonModel<T> : BaseModel<T>, IMessage where T : ModelClass 
Cuestiones relacionadas