예제 #1
0
        public static void Play()
        {
            var unicorn = new Unicorn()
            {
                Name = "Pony", Color = "Blue"
            };

            // unicorn impl Deconstruct
            //_ means discard
            var(n, c1, _) = unicorn;
            Console.WriteLine($"{n},{c1}");

            //unicorn impl IEnumerable
            foreach (var s in unicorn)
            {
                Console.WriteLine(s);
            }

            //unicorn impl IEquatable
            Console.WriteLine(unicorn == null);

            //unicorn impl ICloneable
            var c = new Unicorn(unicorn);

            //unicorn impl IComparable
            c.Name = "YiJiang";
            Console.WriteLine(c.CompareTo(unicorn) > 0 ? "bigger" : "smaller");

            //unicorn has partial impl
            unicorn.Barking();

            //interface mixed in with unicorn (c# 8.0)
            if (unicorn is Runner runable)
            {
                //Run impl in interface def
                runable.Run(5);
            }

            // unicorn.Stop();

            //unicorn impl this[int i]
            Console.WriteLine(unicorn[5]);

            //pass many params in
            unicorn.AnyParams(1, 2, 3, "aaa", "bbb");

            //unicorn impl implicit byte[]
            //NOTE Very Ambiguity,DONT USE OFTEN! Only use it on mathematically purpose
            byte[] b = unicorn;

            //unicorn impl explicit(byte[])
            Unicorn bb = (Unicorn)b;

            //unicorn impl op+
            Console.WriteLine(unicorn + c);
        }