知识大全 C#语言中的重点知识详解(三)
Posted 知
篇首语:一身转战三千里,一剑曾百万师。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 C#语言中的重点知识详解(三)相关的知识,希望对你有一定的参考价值。
C#语言中的重点知识详解(三) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
第五章 代理 代理实现的是象c++等语言的指针功能 不同于函数指针 代理是一种面向对象 安全类型的 代理事派生于公共基类(system)的一种参考类型 方法被压入一个代理中 对于实例方法被称为实例的组成实体或关于实例的方法 而静态方法 被称为类的组成实体或类方法 代理的强大功能是它可以自动的匹配方法 而不管其类型 写一个代理包括三个步骤 写代理 实例化 调用 代理的声明使用以下语法 delegate void SimpleDelegate(); 实例化一个代理 class Test static void F() System Console WriteLine( hello world ); static void Main() SimpleDelegate d = new SimpleDelegate(F);//将方法压入 d();//通过代理 F();//不通过代理 最后让我们调用她 void MultiCall(SimpleDelegate d int count) for (int i = ; i < count; i++) d(); 我们可以看到对于方法的调用是通过代理来完成的 调用时并不需要知道被调用她的类型 代理在我看来好比是对象要一件事她不直接地调用这个方法 而是通过一个中间人去调用她 下面就代理的强大功能进行详细介绍 首先然我们实现一个这样的功能 考虑一下该如何用指向基类的对象调用子类的成员函数 在这里程序员是不是点怀恋指针了 不过在c#中这样的功能完全也可实现的 使用一个单独的代理我们可以完成这项功能 以下代码来自Timothy A Vanover文章 namespace DelegatesCS using System; public class Wisdom //包含代理的类 public delegate string GiveAdvice(); public string OfferAdvice(GiveAdvice Words) return Words(); public class Parent //基类 public virtual string Advice() return( Listen to reason ); ~Parent() public class Dad: Parent //子类 public Dad() public override string Advice() return( Listen to your Mom ); ~Dad() public class Mom: Parent //子类 public Mom() public override string Advice() return( Listen to your Dad ); ~Mom() public class Daughter //不继承与基类的类 public Daughter() public string Advice() return( I know all there is to life ); ~Daughter() public class Test public static string CallAdvice(Parent p)//使用基类 Wisdom parents = new Wisdom(); Wisdom GiveAdvice TeenageGirls = new Wisdom GiveAdvice(p Advice);//将Advice方法委托给TeenageGirls委托对象 return(parents OfferAdvice(TeenageGirls)); public static void Main() Dad d = new Dad(); Mom m = new Mom(); Daughter g = new Daughter(); //以下两个为衍于基类的类 Console WriteLine(CallAdvice(d)); Console WriteLine(CallAdvice(m)); //以下为未衍于基类的类 如果调用将出错 //Console WriteLine(CallAdvice(g)); 代理 二 〉事件 上一章讲解了有关代理的基本应用 本章将继续讲解深入代理的使用 这里我们讲解使用代理来处理事件 关于事件在另一章进行详细讲解 处理事件在c#中对比c++和vb来说更聪明 你可以写代理然后写事件处理者 事件处理者是一种定义在控件和窗体类中的重载的公共事件 我们在以下的例子中将看到代理在事件中的应用 写代理 我想处理鼠标单击事件和在鼠标单击左键或右键处理一些代码 写下面的代码在你的初始控件函数中 this MouseDown += new System WinForms MouseEventHandler(this Form_MouseDown); 写事件 现在你可以写事件处理 你的事件的输出参数将返回窗体的鼠标事件参数的详细内容 以下时鼠标事件参数成员 MouseEventArgs members Button 指示哪一个键被压 分为左 右 中 无 Clicks 指示鼠标压下次数及释放状态 Delta 指示鼠标转动数量计数 X 鼠标点击x坐标点 Y 鼠标点击y坐标点 Event Handler private void Form_MouseDown(object sender System WinForms MouseEventArgs e) switch (e Button) case MouseButtons Left: MessageBox Show(this Left Button Click ); break; case MouseButtons Right: MessageBox Show(this Right Button Click ); break; case MouseButtons Middle: break; default: break; 在你的WinForm中测试你的程序 你会看到通过代理事件被关联了 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! class I public I() ~I() public void IDoLoveYou() System Console WriteLine( I do love You ); public void why()System Console WriteLine( why? ); class HER public HER() ~HER() public void IDo() System Console WriteLine( ); public void slient()System Console WriteLine( ); class TELEPHONE public delegate void heartchat(); public TELEPHONE() ~TELEPHONE() public void hello()System Console WriteLine( yesterday night i telephone to my girlfriend ); class chat static void Main() I i=new I(); HER her=new HER(); TELEPHONE telephone =new TELEPHONE(); telephone hello(); TELEPHONE heartchat tell=new TELEPHONE heartchat(i IDoLoveYou); tell(); TELEPHONE heartchat answer=new TELEPHONE heartchat(her IDo); answer(); TELEPHONE heartchat ask=new TELEPHONE heartchat(i why); ask(); TELEPHONE heartchat noanswer=new TELEPHONE heartchat(her slient); noanswer(); 如同java一样 在c#中写一个多线程应用是非常简单的 本章将介绍如何在c#种开发多线程程序 中线程是由System Threading 名字空间所定义的 所以你必须包含这个名字空间 using System Threading; 开始一个线程 System Threading 名字空间的线程类描述了一个线程对象 通过使用类对象 你可以创建 删除 停止及恢复一个线程 创建一个新线程通过new 操作 并可以通过start()方法启动线程 thread = new Thread(new ThreadStart(HelloWorld)); thread Start(); 注意 和java程序不同 创建新线程并调用start()方法后并不去调用run()方法 而是传递线程调用程序 下面是启动线程执行的函数 protected void HelloWorld() string str ; Console write( helloworld ); 杀死一个线程 线程类的 Abort()方法可以永久的杀死一个线程 在杀死一个线程起前应该判断线程是否在生存期间 if ( thread IsAlive ) thread Abort(); 停止一个线程 Thread Sleep 方法能够在一个固定周期类停止一个线程 thread Sleep(); 设定线程优先级 线程类中的ThreadPriority 属性是用来设定一个ThreadPriority的优先级别 线程优先级别包括Normal AboveNormal BelowNormal Highest and Lowest几种 thread Priority = ThreadPriority Highest; 挂起一个线程 调用线程类的Suspend()方法将挂起一个线程直到使用Resume()方法唤起她 在挂起一个线程起前应该判断线程是否在活动期间 if (thread ThreadState = ThreadState Running ) thread Suspend(); 唤起一个线程 通过使用Resume()方法可以唤起一个被挂起线程 在挂起一个线程起前应该判断线程是否在挂起期间 如果线程未被挂起则方法不起作用 if (thread ThreadState = ThreadState Suspended ) thread Resume(); cha138/Article/program/net/201311/13351相关参考
C#中的Namespace详解[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 别名的使用格
C#中的Namespace详解[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 我现在感到学
知识大全 详解C# 4.0中的新对象ExpandoObject
详解C#4.0中的新对象ExpandoObject 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
C#特性详解 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! C#特性详解
C#中web.config文件详解 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! (一)WebC
C#TextBox事件实现实例详解 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! C#TextB
浅析C#中的套接字编程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!大家都知道Java语言的强大功
详解VisualC#2010几大新特征 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一简介
详解C#中相等运算符重载可能造成的陷阱 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 本文将对作
新手入门之VisualC#命名空间详解 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 命名空间提