0

I have such example

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            Boo();
        }

        interface IBASE_TYPE { };

        interface IFOO<TYPE>: IBASE<TYPE>
            where TYPE: IBASE_TYPE
        { };

        interface IBASE<TYPE> { };

        class A : IBASE_TYPE { }

        class B : IBASE_TYPE { }

        class OneChild : IFOO<A> { }

        class SecondChild : IFOO<B> { }

        void Execute(IFOO<IBASE_TYPE> item)
        {
            if (item == null)
            {
                Console.WriteLine("item is null");
            }
        }

        void Boo()
        {
            var oneChild = new OneChild();
            var secondChild = new SecondChild();

            Execute(oneChild as IFOO<IBASE_TYPE>);
            Execute(secondChild as IFOO<IBASE_TYPE>);
        }
    }

And log here is

item is null
item is null

It is not obvious for me... What is the problem here?

I don't expect that item is null...

P.S.

Look at this, it is like the same example, but here it is works

interface ONE { }

        class G : ONE { }

        class Y : ONE { }

        void SomeMethod()
        {
            var g = new G();
            var Y = new Y();
            More(g);
            More(Y);
        }

        void More(ONE item)
        {
            if (item == null)
            {
                Console.WriteLine("item is null");
            }
        }

So, what is the diff?

Sirop4ik
  • 4,543
  • 2
  • 54
  • 121

0 Answers0