不理解C#的枚举,委托和事件.请求高手给个通俗易懂的例子。就是有代码和对代码的详细解释。十分谢谢
4个回答
展开全部
枚举相对来说还是比较好理解的。这就好像你的一只手一样,你的手掌就好比枚举的声明,而你的每一个手指和你的手掌组成了你整个手。就好像这样的声明:
public enum Hand{
食指,
大拇指,
中指,
...
}
(虽然写中文是可以的,但是尽量不要使用)
假如你现在要用手指在纸上写一些东西,你就要选择哪个手指,或者直接来一个掌印,就可以这样:
MyMind.UserHand(Hand.手掌)
当然,方法内部实现时,就要分别的判断枚举的每一个值,来确定要写成什么样;是一个手指头的印子,还是一个掌印;
-------------------------------
而针对委托和事件,我认为它是作为.net中的一个精髓所在的,当然初学者不建议了解太深,即不要想用委托和事件做太多事情,这样会弄晕你的;只需要适当了解语法的基础和大概的用法就好了。
委托和事件在.net中最经典的应用,就是winform中事件驱动模型(当然asp.net中也有,但是毕竟没有winform来的那么直接)。
我们说用户的任何一个操作都是一个事件,事件本身并不做任何业务操作,而带来的是根据这个事件而触发的执行过程,这就是委托。
举个例子:
老师分发考试的试卷,然后进行考试。应该如何分析这个过程?
按照事件驱动模型进行分析:考试就算作是一个事件,而老师分发试卷则也算作是一个事件的触发。分发完试卷之后,所有的学生要进行考试,则是一个执行的过程;那么从代码角度上,我们应该这样设计;
//学生
public class Student { }
//考题
public class ItemExam { }
public delegate void ExcutingDelegate(object sender, Student stu, ItemExam items);
public class Teacher
{
public event ExcutingDelegate Examing;
private List<Student> StuList = new List<Student>();
//分发试卷
public void Prepare(List<Student> lst)
{
this.StuList = lst;
//为每一个学生分发试卷,为准备考试;
this.Examing += delegate(object sender, Student stu, ItemExam items)
{
//考试的过程
};
}
//开始考试
public void DoExam()
{
foreach (var student in StuList)
{
this.Examing(this, student, new ItemExam());
}
}
}
在winform平台中,还有一个比较经典的设计模式用就是Observer(观察者模式),你可以去网上找找相关的代码学习一下,在这里我就不例举了。
public enum Hand{
食指,
大拇指,
中指,
...
}
(虽然写中文是可以的,但是尽量不要使用)
假如你现在要用手指在纸上写一些东西,你就要选择哪个手指,或者直接来一个掌印,就可以这样:
MyMind.UserHand(Hand.手掌)
当然,方法内部实现时,就要分别的判断枚举的每一个值,来确定要写成什么样;是一个手指头的印子,还是一个掌印;
-------------------------------
而针对委托和事件,我认为它是作为.net中的一个精髓所在的,当然初学者不建议了解太深,即不要想用委托和事件做太多事情,这样会弄晕你的;只需要适当了解语法的基础和大概的用法就好了。
委托和事件在.net中最经典的应用,就是winform中事件驱动模型(当然asp.net中也有,但是毕竟没有winform来的那么直接)。
我们说用户的任何一个操作都是一个事件,事件本身并不做任何业务操作,而带来的是根据这个事件而触发的执行过程,这就是委托。
举个例子:
老师分发考试的试卷,然后进行考试。应该如何分析这个过程?
按照事件驱动模型进行分析:考试就算作是一个事件,而老师分发试卷则也算作是一个事件的触发。分发完试卷之后,所有的学生要进行考试,则是一个执行的过程;那么从代码角度上,我们应该这样设计;
//学生
public class Student { }
//考题
public class ItemExam { }
public delegate void ExcutingDelegate(object sender, Student stu, ItemExam items);
public class Teacher
{
public event ExcutingDelegate Examing;
private List<Student> StuList = new List<Student>();
//分发试卷
public void Prepare(List<Student> lst)
{
this.StuList = lst;
//为每一个学生分发试卷,为准备考试;
this.Examing += delegate(object sender, Student stu, ItemExam items)
{
//考试的过程
};
}
//开始考试
public void DoExam()
{
foreach (var student in StuList)
{
this.Examing(this, student, new ItemExam());
}
}
}
在winform平台中,还有一个比较经典的设计模式用就是Observer(观察者模式),你可以去网上找找相关的代码学习一下,在这里我就不例举了。
追问
越来越糊涂了,不过还是很谢谢你,鄙人理解能力很差,哎。。。。。。。
展开全部
不是见死不救,委托不是一句能说清楚,他是一个方法传递委托变量,可以把
方法直接赋值给委托变量,委托在c#中方法参数必须和委托的参数相同。不相同编译不过。如一个委托 public deletage int update(int i);方法一定要 int xxx(int i),还有一种,是泛型委托如pulic deletege T update<T,T1>(T1 t1).定义变量时候,update<int ,string> update这个方法是int xxx(string s);
delegate T Update<T,T1>(T1 i);
static void Main(string[] args)
{
//Update<int> update = delete;
//Console.Write(update(4));
Update<int,int> update = delete;
Console.Write(update(5));
Console.ReadKey();
}
static int delete(int i)
{
return i;
}
方法直接赋值给委托变量,委托在c#中方法参数必须和委托的参数相同。不相同编译不过。如一个委托 public deletage int update(int i);方法一定要 int xxx(int i),还有一种,是泛型委托如pulic deletege T update<T,T1>(T1 t1).定义变量时候,update<int ,string> update这个方法是int xxx(string s);
delegate T Update<T,T1>(T1 i);
static void Main(string[] args)
{
//Update<int> update = delete;
//Console.Write(update(4));
Update<int,int> update = delete;
Console.Write(update(5));
Console.ReadKey();
}
static int delete(int i)
{
return i;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
网上例子一大堆,而且都很好,为什么不去找呢?
更多追问追答
追问
看过一些,不明白啊。脑子理解能力不好
追答
!!!!我开始也是光看来着,看不明白,但是你自己仿照着做例子呢,做他几个,自己调试看怎么个过程。这样才能理解,要不永远看不懂的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你先试着看一下资料
!如果三天后还是不懂!再问 我来帮你解答
!如果三天后还是不懂!再问 我来帮你解答
更多追问追答
追问
看过了,哎。。。。。。。很难理解
追答
你再继续看两遍!实在不行了,我帮你
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询