请教高手!请大家举例说明一个函数指针数组的例子!急~~~~

解决方案 »

  1.   

    C#好像是使用托管(delegate)来替代函数指针
    C++才叫做函数指针
    好像是这样 ,我也是刚学c#
      

  2.   

    委托是用来处理其他语言(如 C++、Pascal 和 Modula)需用函数指针来处理的情况的。不过与 C++ 函数指针不同,委托是完全面对对象的;另外,C++ 指针仅指向成员函数,而委托同时封装了对象实例和方法。委托声明定义一个从 System.Delegate 类派生的类。委托实例封装一个调用列表,该列表列出一个或多个方法,其中每个方法均作为一个可调用实体来引用。对于实例方法,可调用实体由该方法和一个相关联的实例组成。对于静态方法,可调用实体仅由一个方法组成。用一个适当的参数集来调用一个委托实例,就是用此给定的参数集来调用该委托实例的每个可调用实体。委托实例的一个有趣且有用的属性是:它不知道也不关心它所封装的方法所属的类;它所关心的仅限于这些方法必须与委托的类型兼容
      

  3.   

    C#高级编程中有讲,C#是有指针的看看我临时的写的一个委托的例子
    using System;namespace york
    {
    public delegate void ClassOver();
    public class Clock
    {
    public ClassOver classOver;

    public void  TimeEnd()
    {
    if (classOver!=null)
    {
    classOver();
    }
    }
    }

    public class Student
    {
    public string studentname;
        public Student(string StudentName)
    {
    studentname = StudentName;
    }
    public void GoHome()
    {
    Console.WriteLine(studentname + " is going home!");
    }
    }

    public class MainEntryPoint
    {
    static void Main()
    {
    Clock clock = new Clock();
    Student york = new Student("york");
    clock.classOver = new ClassOver(york.GoHome); '此处相当于传入函数指针
    clock.TimeEnd();
    }
    }
    }
      

  4.   

    给你一个例子,通过API设置信息处理函数的入口:using System.Runtime.InteropServices;namespace WindowsApplication3
    {
    public delegate int WndMessage(int hWnd , int Msg , int wp, int lp ); public class Form1 : System.Windows.Forms.Form
    {
    private const int GWL_WNDPROC = (-4);

    [DllImport("user32")]
    private static extern IntPtr GetWindowLongA(IntPtr hWnd, int nIndex ); [DllImport("user32")]
    private static extern int SetWindowLongA(IntPtr hWnd, int nIndex , WndMessage dwNewLong );//用于设置
    [DllImport("user32")]
    private static extern int SetWindowLongA(IntPtr hWnd, int nIndex , IntPtr dwNewLong );//用于恢复

    [DllImport("user32")]
    private static extern int CallWindowProcA(IntPtr lpPrevWndFunc, IntPtr hWnd, int Msg , int wParam , int lParam ); private IntPtr m_Old_WndMessage;//旧的函数指针
    private  WndMessage m_New_WndMessage;//新的函数指针 private void button1_Click(object sender, System.EventArgs e)
    {
    //保存旧函数指针
    this.m_Old_WndMessage =GetWindowLongA(this.Handle, GWL_WNDPROC);
    //设置新指针
    this.m_New_WndMessage =new WndMessage(this.NewWndMessage);
    SetWindowLongA(this.Handle, GWL_WNDPROC, this.m_New_WndMessage);
    } private int NewWndMessage(IntPtr hWnd , int Msg , int wp, int lp )
    {
    return CallWindowProcA(this.m_Old_WndMessage, hWnd, Msg, wp, lp);
    } private void button2_Click(object sender, System.EventArgs e)
    {
    //恢复原来的消息处理函数
    SetWindowLongA(this.Handle, GWL_WNDPROC, this.m_Old_WndMessage );
    }
    }
    }