发现一个关于委托的问题,还请大侠解释一下..

hy4122 2009-01-04 10:16:23
class Program
{
static void Main(string[] args)
{
Student s = new Student(1, "hihi");
s.Add();
Console.ReadKey();
}
}
public delegate void Show(string name);

public class Student
{
private int _age;
private string _name;

public string Name
{
get { return this._name; }
}
public int Age
{
get { return this._age; }
}
public Student(int age, string name)
{
this._age = age;
this._name = name;
}
public void Change(Show s, string name)
{
if (s != null)
{
s(name);
}
}
public void Add()
{
Change(delegate(string name)
{
Console.WriteLine(name);
Console.WriteLine(_name);
Console.WriteLine(Name);
}, new Student(22, "张三").Name);
}
}

结果显示:
张三
hihi
hihi

为什么会是这样?为什么不是:
张三
张三
张三

注:我穷人,没分!还请多担待!
...全文
85 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
hy4122 2009-01-04
  • 打赏
  • 举报
回复
突然明白了..谢谢楼上!结贴!
daizhenbest 2009-01-04
  • 打赏
  • 举报
回复
Change(delegate(string name)
{
Console.WriteLine(name);
Console.WriteLine(_name);
Console.WriteLine(Name);
}, new Student(22, "张三").Name);

Change(delegate(string name)
{
Console.WriteLine(name);
Console.WriteLine(_name);
Console.WriteLine(Name);
}, "张三");

以上的两个调用效果相同.只有Console.WriteLine(name); 中的name是 "张三" , 而 _name和Name 是Student s = new Student(1, "hihi"); 中的 _name和Name. 故不可能出现你说的那种...

111,130

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧