Pentru Covariance si Contravariance cititi : http://blogs.msdn.com/b/csharpfaq/archive/2010/02/16/covariance-and-contravariance-faq.aspx
Pentru CQRS cititi http://martinfowler.com/bliki/CQRS.html
Acum partea intii – covarianta:
Sa zicem ca vrem sa implementam o parte din CQRS pe interfete:
public interface IFind
{
}
public class ImplementationFind: IFind
{
}
public interface IQuery<T>
where T : class,IFind, new()
{
T Find(int id);
}
public class BaseServiceQuery<T> : IQuery<T>
where T : IFind
{
public T Find(int id)
{
return new T();
}
}
Deci ImplementationFind implementeaza IFind
Ce credeti, se compileaza rindul de mai jos:
IQuery<IFind> da = new BaseServiceQuery<ImplementationFind>(); Console.Write(da.Find(1).GetType());
Daca nu ( si nu!) ce trebuie adaugat ?
( nu, nu va ginditi la DI / IoC – e acelasi lucru)
Raspuns:
{
؛(pı ʇuı)puıɟ ʇ
}
puıɟı : ʇ ǝɹǝɥʍ
<ʇ ʇno>ʎɹǝnbı ǝɔɐɟɹǝʇuı ɔıןqnd
( intrati pe http://www.fliptext.info/ si inversati textul )
Acum ginditi-va si de ce e asa de important un cuvint in C# – de tipul out.
Data viitoare contravarianta