标题:新手请教:C# 关于事件定义的问题及使用目的?
只看楼主
mtg
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2013-4-8
结帖率:50%
已结贴  问题点数:20 回复次数:5 
新手请教:C# 关于事件定义的问题及使用目的?
public class Core
    {
        public const string FIELD_ID = "id";
        public const string FIELD_URL = "url";
        public const string FIELD_TITLE = "title";
      
   #region singleton

        private Core() {
            this._timeoutRetry = Properties.Settings.Default.nudTimeoutRetry;

            ThreadPool.SetMaxThreads(this._maxThreadCount, this._maxThreadCount);
            this._conn = new OleDbConnection(Properties.Settings.Default.databaseConnectionString);
            this._adapter = new OleDbDataAdapter("SELECT * FROM item", this._conn);
            OleDbCommandBuilder _builder = new OleDbCommandBuilder(this._adapter);

            this._connMysql = new MySqlConnection(
                string.Format("host={0};database={1};uid={2};pwd={3};charset=utf8", this._remoteHost, this._remoteDb, this._remoteUser, this._remotePwd));
            
        }

        private static Core _instance;

        public static Core Instance {
            get {
                if (_instance == null) {
                    _instance = new Core();
                }
                return _instance;
            }
        }

        #endregion

         /// 所有线程状态
        /// </summary>
        private Queue<RequestState> _queueStates = new Queue<RequestState>();

        /// <summary>
        /// 默认编码
        /// </summary>
        private Encoding _defaultEncoding = Encoding.UTF8;


 #region 事件

               // 记录状态发生改变
        public delegate void StatusChangeDelegate(LocalData.itemRow row);
        public event StatusChangeDelegate OnStatusChange;

            //// 事件:工作状态发生改变
        //public delegate void OnWorkerStatusChangeDelegate(WorkerStatuses status);
        //public event OnWorkerStatusChangeDelegate OnWorkerStatusChange;

        #endregion

以下是问题:
 1、 这句 private Core() 为什么要定义成private?

2、语句“public static Core Instance”是构造函数吗?
Instance为什么要加static?
3、连接是远程MYSQL数据库,为什么要加charset=utf8?C#支持哪些字符集?
4、这下面两句什么意思?
 private Queue<RequestState> _queueStates = new Queue<RequestState>();
 private Encoding _defaultEncoding = Encoding.UTF8;

5、事件是什么意思, 程序中也没有找到OnStatusChange的定义,下面这句怎么理解啊?
上面这些事件代码是机器添加的,还是手工添加的啊?
public event StatusChangeDelegate OnStatusChange;




[ 本帖最后由 mtg 于 2013-4-16 18:23 编辑 ]
搜索更多相关主题的帖子: private public title 
2013-04-12 10:50
lantian8134
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:8
帖 子:115
专家分:789
注 册:2013-1-11
得分:10 
1 为了不让外部代码能够实例化Core类
2 不是构造函数,只是一个普通的静态方法,你在外面想要获取Core的实例,必须调用静态的Instance方法,实现了运行过程中只有一个Code类型实例
3 没有接触过mysql,在连接字符串中加入utf8可能是为了防止从mysql中读出来的数据是乱码。Encoding类中包含c#常用字符编码
4 定义一个包含RequestState类型的先进先出集合。设置defaultEncoding为UTF8编码
2013-04-12 13:23
mtg
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2013-4-8
得分:0 
版主解释的很详细,非常感谢!
2、只是实例化Core类,为什么要搞个Instance方法进行,直接调用Core类不是更简单?
“实现了运行过程中只有一个Code类型实例”,理解不了,是不是程序中只能定义一个实例?为什么要这样?


[ 本帖最后由 mtg 于 2013-4-12 14:40 编辑 ]
2013-04-12 14:37
lantian8134
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:8
帖 子:115
专家分:789
注 册:2013-1-11
得分:0 
直接调用Core类是更简单,大部分时候是只要new一下就行了,但是有时候需求就需要运行过程中最多只有一个类型实例譬如为了节约资源等其他好处,我的表达能力不够好。
其实这种就是设计模式中的单例模式,网上资料很多的
2013-04-12 15:45
mtg
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2013-4-8
得分:0 
版主,我加了一个问题,能帮我回答一下第5个问题吗?
5、事件是什么意思, 程序中也没有找到OnStatusChange的定义,下面这句怎么理解啊?
上面这些事件代码是机器添加的,还是手工添加的啊?
public event StatusChangeDelegate OnStatusChange;

// 记录状态发生改变
public delegate void StatusChangeDelegate(PageInfo page);
public event StatusChangeDelegate StatusChangeEvent;

[ 本帖最后由 mtg 于 2013-4-14 15:52 编辑 ]
2013-04-14 15:28
yhlvht
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:36
帖 子:707
专家分:4405
注 册:2011-9-30
得分:10 
事件就是当满足某个条件的时候,就自动跳转到某个方法去执行相应的代码,比如我点击一个按钮,我就希望能够处理一些事情,或是当我某个文本框的值改变的时候,我就想要处理一些东西,这就需要添加事件

只要看到event出现的,都是手工添加的事件,机器添加的事件是封装好了的,你是看不到的
事件并不难,但是一开始可能理解起来还是有点麻烦,这里有篇讲委托和事件的文章,个人觉得写得挺好,如果你对委托和事件有兴趣,可以看看,一开始慢慢看,一句一句看懂,无论是文字还是代码
http://www.
2013-04-14 16:58



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-403962-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022948 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved