我不明白的一些地方

时间:2019-11-23 21:51:08

标签: c#

C#代码:


   using System;

    // this is the delegate declaration
    public delegate int Comparer(object obj1, object obj2);

    public class Name
    {
        public string FirstName = null;
        public string LastName = null;

        public Name(string first, string last)
        {
            FirstName = first;
            LastName = last;
        }

        // this is the delegate method handler
        public static int CompareFirstNames(object name1, object name2)
        {
            string n1 = ((Name)name1).FirstName;
            string n2 = ((Name)name2).FirstName;

            if (String.Compare(n1, n2) > 0)
            {
                return 1;
            }
            else if (String.Compare(n1, n2) < 0)
            {
                return -1;
            }
            else
            {
                return 0;
            }
        }

        public override string ToString()
        {
            return FirstName + " " + LastName;
        }
    }

    class SimpleDelegate
    {
        Name[] names = new Name[5];

        public SimpleDelegate()
        {
            names[0] = new Name("Joe", "Mayo");
            names[1] = new Name("John", "Hancock");
            names[2] = new Name("Jane", "Doe");
            names[3] = new Name("John", "Doe");
            names[4] = new Name("Jack", "Smith");
        }

        static void Main(string[] args)
        {
            SimpleDelegate sd = new SimpleDelegate();

            // this is the delegate instantiation
            Comparer cmp = new Comparer(Name.CompareFirstNames);

            Console.WriteLine("\nBefore Sort: \n");

            sd.PrintNames();

            // observe the delegate argument
            sd.Sort(cmp);

            Console.WriteLine("\nAfter Sort: \n");

            sd.PrintNames();
        }

        // observe  the delegate parameter
        public void Sort(Comparer compare)
        {
            object temp;

            for (int i=0; i < names.Length; i++)
            {
                for (int j=i; j < names.Length; j++)
                {
                    // using delegate "compare" just like
                    // a normal method
                    if ( compare(names[i], names[j]) > 0 )
                    {
                        temp = names[i];
                        names[i] = names[j];
                        names[j] = (Name)temp;
                    }
                }
            }
        }

        public void PrintNames()
        {
            Console.WriteLine("Names: \n");

            foreach (Name name in names)
            {
                Console.WriteLine(name.ToString());
            }
        }
    }

我根本不了解代码的两个部分。这些部分分别做什么(分别);我需要学习哪些主题来理解这些部分?

string n1 = ((Name)name1).FirstName;

[[Name)name1)做什么?

public void Sort(Comparer compare)

任何人都可以提供有关代码中这些部分功能的任何提示或反馈吗?您能否引导我朝正确的方向前进?

1 个答案:

答案 0 :(得分:1)

第一位:string n1 = ((Name)name1).FirstName

  • (Name)name1,通常可以写为(Type)variable。这样做是采取变量并尝试将变量name1转换为类型Name(将其转换为同义词)。然后,这使我们可以访问FirstName属性。
  • 在此处了解更多信息:https://www.w3schools.com/cs/cs_type_casting.asp

第二:public void Sort(Comparer compare)

这是一个方法声明。

  • public表示可访问性。其他选项包括privateprotected和其他几个选项。 public表示该方法可以由任何引用了此对象实例的代码来调用。
  • void表示返回类型。 void是一个特殊的关键字,表示该方法未返回任何值。
  • Sort是方法名称
  • Compare compareCompare是要传递的参数的类型,compare是可以在整个方法中使用的参数的名称。
  • 在此处了解更多信息:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/methods