当前位置:  编程技术>综合
本页文章导读:
    ▪c#关于Delegate最简单的例子:两个窗体间的消息传递              关于Delegate【代理、委托】是C#中一个非常重要的概念,向前可以推演到C++的指针,向后可以延续到匿名方法、lambda表达式。       &.........
    ▪可扩展的序列化协议      OceanBase的序列化协议是一种可扩展的协议,其基本单元为: <TYPE_FLAG_FILED><Content> 一个完整的数据包是形如下面的内容: <TYPE_FLAG_FILED><Content><TYPE_FLAG_FILED><Content><.........
    ▪radom_simple      #include <stdio.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/file.h> #include <sys/time.h> #include <errno.h> #include <unistd.h> #include <stdlib.h> static int .........

[1]c#关于Delegate最简单的例子:两个窗体间的消息传递
    来源: 互联网  发布时间: 2013-11-10

        关于Delegate【代理、委托】是C#中一个非常重要的概念,向前可以推演到C++的指针,向后可以延续到匿名方法、lambda表达式。

        现在我就从一个最简单最实用的一个小例子出发分析一下Delegate的使用。

        现在有两个窗体Form1和Form2。

        两个按钮Button1(Form)和Button2(Form2)。

Form1的代码:

private void button1_Click(object sender, EventArgs e)
  {
   Form2 frm = new Form2(textBox1.Text);
   frm.SetProperty += new Form2.DelegateText(SetProperty2);
   frm.ShowDialog();
  }

private void SetProperty2()
  {
   MessageBox.Show("ok");
  }

 

Form2的代码:

public delegate void DelegateText();
  public DelegateText SetProperty;

private void button2_Click(object sender, EventArgs e)
  {
   SetProperty();
  }

 

        分析者两段简短的代码,可以看出一些Delegate的好处,之前我写这个功能的时候是将form1的对象传给form2,点击form2之后再铜鼓from1的对象调用form1的public方法,这样的代码总觉得很别扭,也就是所谓的类型不安全,需要公开所要调用的方法,还需要将form1的对象传递至form2中,显然不是最佳的方案。

        现在有了Delegate问题就迎刃而解了,相当于new form2的时候,我让form2代替我去更新属性的操作,这样我的方法不需要暴露出来,而form2也只能调用这一个方法,也就达到了所谓的类型安全的说法,此虽是个小例子,但是却能管中窥豹,看到一些Delegate的好处。

         如果不同的观点请各位博友留言讨论。

 

作者:jcx5083761 发表于2013-1-9 11:53:42 原文链接
阅读:32 评论:0 查看评论

    
[2]可扩展的序列化协议
    来源: 互联网  发布时间: 2013-11-10

OceanBase的序列化协议是一种可扩展的协议,其基本单元为:

<TYPE_FLAG_FILED><Content>


一个完整的数据包是形如下面的内容:

<TYPE_FLAG_FILED><Content><TYPE_FLAG_FILED><Content><TYPE_FLAG_FILED><Content>.......<TYPE_FLAG_FILED><Content>


例如:

<RESERVE_PARAM_FIELD><readmode:1, trans_id:102><BASIC_FIELD_PARAM><tid:1024, cid:21, other:abc>....


接收端解析方式:

bool more = true;
while(more)
{
	MyClass.deserialize(buf, pos, flag);
	switch(flag)
	{
	case RESERVE_PARAM_FIELD:
		deserialize_readmode();
		deserialize_trans_id();
		break;
	case BASIC_FIELD_PARAM:
		deserialize_tid_cid();
		deserialize_other();
		break;
	case END_PARAM:
		more = false;
		break;
	}
}



通过这种方式,可以很方便的加入新的域,而不影响与老版本程序的兼容性。新版本程序可以处理老版本程序发来的数据包,即:向后兼容。


OceanBase中大量使用了这种方式来处理,但我觉得,过于泛滥。因为: 兼容性有必要,但是没必要细化到每一个域。只要用一个比较粗的域来区分新旧版本即可,对于同一个版本内用RESERVE_PARAM_FIELD,BASIC_FIELD_PARAM这种区分每个域没必要,只需要按照约定顺序解析数据即可。


作者:maray 发表于2013-1-9 11:52:15 原文链接
阅读:35 评论:0 查看评论

    
[3]radom_simple
    来源: 互联网  发布时间: 2013-11-10

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/file.h>
#include <sys/time.h>
#include <errno.h>
#include <unistd.h>
#include <stdlib.h>

static int get_random_fd (void)
{
    static int fd = -2;

    if (fd == -2)
    {
        fd = open ("/dev/random", O_RDONLY | O_NONBLOCK);
        if (fd == -1)
            fd = open ("/dev/urandom", O_RDONLY | O_NONBLOCK);
    }

    return fd;
}


void get_random_bytes(void* buf, int nbytes)
{
    int i, fd = get_random_fd();
    int lose_counter = 0;
    char *cp = (char*)buf;
    struct timeval tv;
    static unsigned seed = 0;

    if (fd >= 0)
    {
        while (nbytes > 0)
        {
            i = read (fd, cp, nbytes);
            if ((i < 0) &&
                    ((errno == EINTR) || (errno == EAGAIN)))
                continue;

            if (i <= 0)
            {
                if (lose_counter++ == 8)
                    break;

                continue;
            }
            nbytes -= i;
            cp += i;
            lose_counter = 0;
        }
    }

    for (i = 0; i < nbytes; i++)
    {
        if (seed == 0)
        {
            gettimeofday(&tv, 0);
            seed = (getpid() << 16) ^ getuid() ^ tv.tv_sec ^ tv.tv_usec;
        }
        *cp++ = rand_r(&seed) & 0xFF;
    }

    return;
}

int main()
{
  return 0;
}

作者:qianzhaotu 发表于2013-1-9 11:51:24 原文链接
阅读:36 评论:0 查看评论

    
最新技术文章:
▪error while loading shared libraries的解決方法    ▪版本控制的极佳实践    ▪安装多个jdk,多个tomcat版本的冲突问题
▪简单选择排序算法    ▪国外 Android资源大集合 和个人学习android收藏    ▪.NET MVC 给loading数据加 ajax 等待loading效果
▪http代理工作原理(3)    ▪关注细节-TWaver Android    ▪Spring怎样把Bean实例暴露出来?
▪java写入excel2007的操作    ▪http代理工作原理(1)    ▪浅谈三层架构
▪http代理工作原理(2)    ▪解析三层架构……如何分层?    ▪linux PS命令
▪secureMRT Linux命令汉字出现乱码    ▪把C++类成员方法直接作为线程回调函数    ▪weak-and算法原理演示(wand)
▪53个要点提高PHP编程效率    ▪linux僵尸进程    ▪java 序列化到mysql数据库中
▪利用ndk编译ffmpeg    ▪活用CSS巧妙解决超长文本内容显示问题    ▪通过DBMS_RANDOM得到随机
▪CodeSmith 使用教程(8): CodeTemplate对象    ▪android4.0 进程回收机制    ▪仿天猫首页-产品分类
▪从Samples中入门IOS开发(四)------ 基于socket的...    ▪工作趣事 之 重装服务器后的网站不能正常访...    ▪java序列化学习笔记
▪Office 2010下VBA Addressof的应用    ▪一起来学ASP.NET Ajax(二)之初识ASP.NET Ajax    ▪更改CentOS yum 源为163的源
▪ORACLE 常用表达式    ▪记录一下,AS3反射功能的实现方法    ▪u盘文件系统问题
▪java设计模式-观察者模式初探    ▪MANIFEST.MF格式总结    ▪Android 4.2 Wifi Display核心分析 (一)
▪Perl 正则表达式 记忆方法    ▪.NET MVC 给loading数据加 ajax 等待laoding效果    ▪java 类之访问权限
▪extjs在myeclipse提示    ▪xml不提示问题    ▪Android应用程序运行的性能设计
▪sharepoint 2010 自定义列表启用版本记录控制 如...    ▪解决UIScrollView截获touch事件的一个极其简单有...    ▪Chain of Responsibility -- 责任链模式
▪运行skyeye缺少libbfd-2.18.50.0.2.20071001.so问题    ▪sharepoint 2010 使用sharepoint脚本STSNavigate方法实...    ▪让javascript显原型!
▪kohana基本安装配置    ▪MVVM开发模式实例解析    ▪sharepoint 2010 设置pdf文件在浏览器中访问
▪spring+hibernate+事务    ▪MyEclipse中文乱码,编码格式设置,文件编码格...    ▪struts+spring+hibernate用jquery实现数据分页异步加...
▪windows平台c++开发"麻烦"总结    ▪Android Wifi几点    ▪Myeclipse中JDBC连接池的配置
▪优化后的冒泡排序算法    ▪elasticsearch RESTful搜索引擎-(java jest 使用[入门])...    ▪MyEclipse下安装SVN插件SubEclipse的方法
▪100个windows平台C++开发错误之七编程    ▪串口转以太网模块WIZ140SR/WIZ145SR 数据手册(版...    ▪初识XML(三)Schema
▪Deep Copy VS Shallow Copy    ▪iphone游戏开发之cocos2d (七) 自定义精灵类,实...    ▪100个windows平台C++开发错误之八编程
▪C++程序的内存布局    ▪将不确定变为确定系列~Linq的批量操作靠的住...    ▪DIV始终保持在浏览器中央,兼容各浏览器版本
▪Activity生命周期管理之三——Stopping或者Restarti...    ▪《C语言参悟之旅》-读书笔记(八)    ▪C++函数参数小结
▪android Content Provider详解九    ▪简单的图片无缝滚动效果    ▪required artifact is missing.
▪c++编程风格----读书笔记(1)    ▪codeforces round 160    ▪【Visual C++】游戏开发笔记四十 浅墨DirectX教程...
▪【D3D11游戏编程】学习笔记十八:模板缓冲区...    ▪codeforces 70D 动态凸包    ▪c++编程风格----读书笔记(2)
▪Android窗口管理服务WindowManagerService计算Activity...    ▪keytool 错误: java.io.FileNotFoundException: MyAndroidKey....    ▪《HTTP权威指南》读书笔记---缓存
▪markdown    ▪[设计模式]总结    ▪网站用户行为分析在用户市场领域的应用
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3