En el siguiente código, paso una estructura a un constructor que está esperando una clase. ¿Por qué se compila y se ejecuta sin error (y produce el resultado deseado)?¿No se aplica "donde T: clase" de ninguna manera en tiempo de compilación o tiempo de ejecución?
class Program
{
static void Main()
{
var entity = new Foo { Id = 3 };
var t = new Test<IEntity>(entity); // why doesn't this fail?
Console.WriteLine(t.Entity.Id.ToString());
Console.ReadKey();
}
}
public class Test<TEntity> where TEntity : class
{
public TEntity Entity { get; set; }
public Test(TEntity entity)
{
Entity = entity;
}
public void ClearEntity()
{
Entity = null;
}
}
public struct Foo : IEntity
{
public int Id { get; set; }
}
public interface IEntity
{
int Id { get; set; }
}
Si cambio mi método Main()
de manera que incluya una llamada a ClearEntity()
, como se muestra a continuación, que todavía genera ningún error. ¿Por qué?
static void Main()
{
var entity = new Foo { Id = 3 };
var t = new Test<IEntity>(entity);
Console.WriteLine(t.Entity.Id.ToString());
t.ClearEntity(); // why doesn't this fail?
Console.ReadKey();
}
'Foo' siendo' IEntity', estará en caja. La instancia en caja es una instancia de una clase. – Humberto
¿Cómo puede compilar 't.Entity.Id' cuando' Entity' se define como type 'TEntity' donde' TEntity: class', que no implementa 'IEntity'? –