示例#1
0
        static void Main(string[] args)
        {
            Clear();
            var harry = new Person()
            {
                Name = "Harry"
            };
            var mary = new Person()
            {
                Name = "Mary"
            };
            var jill = new Person()
            {
                Name = "Jill"
            };

            // Call instance method
            var baby1 = mary.ProcreateWith(harry);

            baby1.Name = "Gary";

            // Call static method
            var baby2 = Person.Procreate(harry, jill);

            // call an operator
            var baby3 = harry * mary;

            WriteLine($"{harry.Name} has {harry.Children.Count} children.");
            WriteLine($"{mary.Name} has {mary.Children.Count} children.");
            WriteLine($"{jill.Name} has {jill.Children.Count} children.");
            WriteLine(format: "{0}'s first child is named \"{1}\".",
                      arg0: harry.Name,
                      arg1: harry.Children[0].Name);


            // local function Recursive call
            WriteLine($"5! is {Person.Factorial(5)}");

            // Delegate
            WriteLine(harry.MethodIWantToCall("EkmekPeynir"));
            var d       = new Person.DelegateWithMatchingSignature(harry.MethodIWantToCall);
            var answer2 = d("Ekmek");

            WriteLine(answer2);

            harry.Shout = Harry_Shout;
            harry.Poke();
            harry.Poke();
            harry.Poke();
            harry.Poke();

            // TESTS
            harry.DoSomethin();

            // seperator
            WriteLine(new string('-', 35));

            // Comparing object when sorting
            Person[] people =
            {
                new Person {
                    Name = "Simon"
                },
                new Person {
                    Name = "Jenny"
                },
                new Person {
                    Name = "Adam"
                },
                new Person {
                    Name = "Richard"
                },
                new Person {
                    Name = "Ayse"
                },
                new Person {
                    Name = "Ahmet"
                },
                new Person {
                    Name = "Zekeriya"
                }
            };

            WriteLine("Initial List Of People : ");
            foreach (var person in people)
            {
                WriteLine($"    {person.Name}");
            }

            WriteLine("Use Person's IComparable implemantation to sort : ");
            Array.Sort(people);
            foreach (var person in people)
            {
                WriteLine($"    {person.Name}");
            }

            // -----------------------------------------------------------------
            // seperator
            WriteLine(new string('-', 35));

            WriteLine("Use PersonComparer's IComparer implementation to sort : ");
            Array.Sort(people, new PersonComparer());
            foreach (var person in people)
            {
                WriteLine($"    {person.Name}");
            }
            // -----------------------------------------------------------------

            // Object
            // -----------------------------------------------------------------
            // seperator
            WriteLine(new string('-', 35));

            var t1 = new Thing();

            t1.Data = 42;
            WriteLine($"Thing with an integer: {t1.Process(42)}");

            var t2 = new Thing();

            t2.Data = "apple";
            WriteLine($"Thing with a string: {t2.Process("apple")}");
            // -----------------------------------------------------------------

            // Generic Type
            // -----------------------------------------------------------------
            // seperator
            WriteLine(new string('-', 35));

            var g1 = new GenericThing <int>();

            g1.Data = 42;
            WriteLine($"GenericThing with an integer: {g1.Process(42)}");

            var g2 = new GenericThing <string>();

            g2.Data = "apple";
            WriteLine($"GenericThing with a string: {g2.Process("apple")}");

            var g3 = new GenericThing <char>();

            g3.Data = 'A';
            WriteLine($"GenericThing with a char: {g3.Process('A')}");

            WriteLine(new string('-', 35));
            // -----------------------------------------------------------------

            // -----------------------------------------------------------------
            WriteLine(new string('-', 35));

            var dv1 = new DisplacementVector(3, 5);
            var dv2 = new DisplacementVector(-2, 7);
            var dv3 = dv1 + dv2;

            WriteLine($"({dv1.X}, {dv1.Y}) + ({dv2.X}, {dv2.Y}) =" +
                      $" ({dv3.X}, {dv3.Y})");

            WriteLine(new string('-', 35));
            // -----------------------------------------------------------------
        }