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