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)
任何人都可以提供有关代码中这些部分功能的任何提示或反馈吗?您能否引导我朝正确的方向前进?
答案 0 :(得分:1)
第一位:string n1 = ((Name)name1).FirstName
(Name)name1
,通常可以写为(Type)variable
。这样做是采取变量并尝试将变量name1
转换为类型Name
(将其转换为同义词)。然后,这使我们可以访问FirstName
属性。第二:public void Sort(Comparer compare)
这是一个方法声明。
public
表示可访问性。其他选项包括private
,protected
和其他几个选项。 public
表示该方法可以由任何引用了此对象实例的代码来调用。void
表示返回类型。 void
是一个特殊的关键字,表示该方法未返回任何值。Sort
是方法名称Compare compare
:Compare
是要传递的参数的类型,compare
是可以在整个方法中使用的参数的名称。