知识大全 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]

C#中的Namespace详解[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  别名的使用格

知识大全 C#中的Namespace详解[1]

C#中的Namespace详解[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  我现在感到学

知识大全 详解C# 4.0中的新对象ExpandoObject

详解C#4.0中的新对象ExpandoObject  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 C#特性详解

C#特性详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  C#特性详解  

知识大全 C#中web.config文件详解

C#中web.config文件详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  (一)WebC

知识大全 C# TextBox事件实现实例详解

C#TextBox事件实现实例详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  C#TextB

知识大全 浅析C#中的套接字编程

浅析C#中的套接字编程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!大家都知道Java语言的强大功

知识大全 详解Visual C# 2010几大新特征

详解VisualC#2010几大新特征  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一简介  

知识大全 详解C#中相等运算符重载可能造成的陷阱

详解C#中相等运算符重载可能造成的陷阱  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本文将对作

知识大全 新手入门之 Visual C#命名空间详解

新手入门之VisualC#命名空间详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  命名空间提