2017년 8월 21일 월요일

Covariance vs Contravariance

covariance : converting from wider to narrower (넓은것에서 좁은것으로의 변환)

contravariance : converting from narrower to wider (좁은것에서 넓은것으로의 변환)


제네릭 인터페이스에서 형식 매개 변수가 다음 조건을 충족하는 경우 공변(covariant)으로 선언할 수 있습니다.
  • 형식 매개 변수는 인터페이스 메서드의 반환 형식으로만 사용되고 메서드 인수의 형식으로 사용되지 않습니다.

형식 매개 변수는 인터페이스 메서드에 대한 제네릭 제약 조건으로 사용되지 않습니다.


   interface INoraml { }
    class NormalSample : INoraml { }



    interface ICovariant { }
    class Sample : ICovariant { }

    interface IContravariant { }
    class SampleContra : IContravariant { }


    public class covriance
    {
      public void main()
        {
            ICovariant iobj = new Sample();
            ICovariant istr = new Sample();
            ICovariant iobst = new Sample();

            iobj = istr;
        }

        public void main2()
        {
            INoraml iobj = new NormalSample();
            INoraml istr = new NormalSample();
            INoraml iobst = new NormalSample();
            iobj = istr;
            istr = iobj;
        }

        public void main3()
        {
            IContravariant iobj = new SampleContra();
            IContravariant istr = new SampleContra();
            IContravariant iobst = new SampleContra();
            iobj = istr;
            istr = iobj;
        }

댓글 없음:

댓글 쓰기