`
bollaxu
  • 浏览: 219483 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论
文章列表

C# virtual和override

    博客分类:
  • C#
在函数的声明中,当有“virtual”修饰的时候,和没有virtual有什么区别呢?最重要的一点就是调用实例的函数是在编译的时候确定还是在运行的时候确定,virtual函数是在运行的时候来确定具体调用哪个类。这个特性是和父子类继承息息相关的。   这儿有个例子,在网上很多地方被转载,我稍微扩展了一下:   using System; namespace Smz.Test { class A { public virtual void Func() // 注意virtual,表明这是一个虚拟函数 { Co ...

C# Reflection 反射

    博客分类:
  • C#
Reflection反射有四种表现方式: 1.查看元数据metadata(通过attributes特性表示的),用于显示等 2.类型的发现(类型、类型中定义的属性、方法、事件等) 3.推迟绑定对象,可以动态实例化对象并调用方法 4.动态创建新的类型   类型发现的实例:   //读取库 Assembly a = Assembly.Load("Mscorlib.dll"); //读取库的所有类型,存入数组 Type[] types = a.GetTypes(); //读取一个类 Type theType = Type.GetType("Sys ...
先概括一下Inversion of Control控制反转:是一种设计模式,在依赖关系上进行倒转。具体的体现有“应用程序不应依赖于容器,而是容器服务于应用程序”。   根据Martin Fowler的理解,IoC其实就是框架(framework)和库(library)的区别。库实际意义上就是一系列可用的方法函数,而框架则定义了一些设计模式,比如有如下的ruby代码 #ruby puts 'What is your name?' name = gets process_name(name) puts 'What is your quest?' ques ...
先概括Dependency Injection也就是依赖注入:一种设计模式,当类设计中使用到某种其它的类或插件类时,是通过对象引用而不是直接创建对象来实现的,在声明的时候,只需确定接口或者基类就可以了。   引用概念提出者martin fowl ...

C#的windows services

    博客分类:
  • C#
  1. 新建windows  services模板,自动生成代码 2. 加入自己的代码,一般在OnStart()函数创建一个线程,OnStart()函数会在服务启动的时候执行一次。注意,不要在这个函数里面写循环,会导致启动卡死,代码应写在线程里面 3. 添加安装程序,转到设计界面,在右边的属性栏下面应该有一个“命令栏”,如果没有的话可以右键点击属性页(灰色)勾选出命令栏 4. 编译代码,可以生成,但不能直接在VS里面调试。应该调用InstallUtil.exe(C:\Windows\Microsoft.NET\Framework\v4.0.30319目录下 )添加一个服务(此时服务还未 ...
Ruby类下对访问控制的限制也是用public,protected和private来做的。虽然用的是和C++和Java相同的名字,但是Ruby下的protected和private定义还是有所不同的。   class ClassSuper attr_accessor :attr1 def initialize @attr1 = "attr1" end private def privateMethod puts "this is private" end ...

Ruby类方法的定义

    博客分类:
  • Ruby
Ruby定义类方法(即static method)有几种,简单的例子 class Foo def Foo.dummy1 puts "dummy1" @name = "dummy1" @@var = "dummy1" puts @name end def Foo::dummy2 puts "dummy2" @name = "dummy2" ...
在编写c/c++程序的时候有时候会出一些诡异的core,无法定位到具体的代码或者定位到了一些貌似不可能出错的地方。这很可能是由于栈溢出、数组越界、打印类型不符(比如常见的%s输成了string变量而不是用c_str()方法)导致的。这要求在编写代码的时候要注意,一个好的习惯是在编译的时候发现的warning全部去掉。

CppUnit学习

  CppUnit定义了几个基础类以及几个继承它们的子类。 基础类主要是定义了一些virtual函数,规定一些行为;用户主要继承使用如TestCase这样的类来完成测试用例。   TestFixture 定义了setUp()和tearDown()两个virtual函数,用来给测试 ...
程序使用MySQL的C API比较频繁,在检查程序内存泄露的时候,想到了API里面会不会有内存泄露的问题。网上说mysql api在使用的时候会出现泄露,有人用了valgrind来测试,找到了可能出现泄露的地方,官方的api文档里面也说到,如果使用完api之后,最好调用mysql_library_end()函数来释放内存。   mysql api的官方建议,如果是多线程的时候,最好是在创建线程之前就调用mysql_init()函数,或者使用mutex加锁,因为这个函数不是线程安全的。(具体见:http://docs.oracle.com/cd/E17952_01/refman-5.5-en/ ...
最近用fastcgi的c语言api写服务,发现一个问题。我用nginx来接收请求,并通过fastcgi_pass传递到c程序。在用curl测试请求的时候,发现c程序是有被调用的,但是nginx返回的响应一直是502 "upstream closed prematurely FastCGI stdout while reading response header from upstream"。在网上找了很久,也有同样的问题,但是一般都是说原因是printf的时候没有按照http协议,比如说一定要printf("Content-type: text/html \r\n\ ...
Chapter 2 Introduction to C++ and the standardy library   这章主要是概括地讲一些关于C++的历史和特性。 C++的标准化过程从1989年就开始了,直到1997年才结束(制定标准的过程很漫长,伴随着多方的努力和协商)。不过按照作者的意思, ...
1) 什么是”Last-Modified”?   在浏览器第一次请求某一个URL时,服务器端的返回状态会是200,内容是你请求的资源,同时有一个Last-Modified的属性标记此文件在服务期端最后被修改的时间,格式类似这样: Last-Modified: Fri, 12 May 2006 ...
在编写socket程序的时候,遇到一个奇怪的问题,服务端用accept接收请求,客户端通过telnet连接上去。结果每次连上去以后连接又立即断开了,而server端accept以后并没有close连接。   代码如下: /*server*/ int main() { //... socklen_t cli_len; struct sockaddr_in clientaddr; while(1) { int connfd = accept(listenfd, (struct sockaddr *)&clientaddr, &cli_l ...
在研究了Nginx以及开发了几个服务器端的软件之后,对于支持高并发的C程序架构总结一下。一般都是多进程或者多线程。对于多线程,因为是一个process space,好处是线程间共享内存,通信方式相对比较丰富,坏处是如果一个线程 ...
Global site tag (gtag.js) - Google Analytics