急问: 委托事件编译错误,提示无法隐式类型转换一个简单的数据库访问类,
希望通过委托机制实现将底层的数据库访问对象的事件抛出在编译时提示无法进行隐式类型转换
(详见代码)请各位大虾帮忙看看
namespace my_DBQuery
{
    using System;
    using System.Data;
    
    public delegate void StateChangeEventHandler(Object sender, System.Data.StateChangeEventArgs e);
    public class DBquery
    {
//数据库连接对象
        private System.Data.SqlClient.SqlConnection DBConn; //希望引发的用户定义事件定义
        public event StateChangeEventHandler ConnStateChanged;

//引发用户事件
        private void ConnStateEvent(object sender, System.Data.StateChangeEventArgs e)
        {
            if (ConnStateChanged != null)
            {
                ConnStateChanged(this, e);
            }
        }    //连接数据库
        private void Connect()
        {
            string ConnString = ConnString = "Integrated Security=;" +
                            "Data Source = 127.0.0.1;database = test;Uid =sa;pwd =1234";
            try
            {
                
                Disconnect();
                
                DBConn = null;
                DBConn = new System.Data.SqlClient.SqlConnection(ConnString);
                DBConn.StateChange += new StateChangeEventHandler(ConnStateEvent);
//---------------------------------------此处系统提示编译错误
//错误提示为:无法将my_DBQuery.StateChangeEventHandler
// 隐式转换为System.Data.StateChangeEventHandler
//为什么????????
                
                DBConn.Open();            }
            catch (System.Data.SqlClient.SqlException sqlEx)            { }
            catch (Exception e)            {  }
        }
//断开数据库连接
        public void Disconnect()
        {
            if (DBConn.State  > 0)
                DBConn.Close();
            DBConn.StateChange -= new StateChangeEventHandler(ConnStateEvent); 
//--------------------同样的错误提示
            DBConn = null;
        }
    }}

解决方案 »

  1.   

    自定义delegate与现有的重名了,改名或者用全称名(前面加命名空间)
      

  2.   

    System.Data.StateChangeEventHandler是已存在的
    你也using System.Data;
    所以系统认为StateChangeEventHandler是System.Data.StateChangeEventHandler,
    与my_DBQuery.StateChangeEventHandler混淆了
      

  3.   

    change
    DBConn.StateChange += new StateChangeEventHandler(ConnStateEvent);with
    DBConn.StateChange += new System.Data.StateChangeEventHandler(ConnStateEvent);
      

  4.   

    去掉     public delegate void StateChangeEventHandler(Object sender, System.Data.StateChangeEventArgs e);
    即可