Author Archive

c#中“躲在幕后”的ToString方法

11月 11th, 2009

在c#中的object这个对象中,最常用的(也是最常被覆载)的方法,当属ToString()方法,在派生类继承object类中ToString()方法,如果派生类没有覆载ToString()方法,那么当调用ToString()方法时,只是输出类名,当覆载之后,才能输出用户自定义的内容。

在console.writeline方法中,一般认为该方法接受字符串参数,其实他已经被覆载的可以接受任意对象作为其参数,当一个对象引用被传入,writeline方法会自动调用该对象的tostring方法来得到该类的字符串表示,并输出到控制台。

c#常量知识点总结

11月 10th, 2009

做完一个小项目后,发现自己的c#的基础知识有点缺失了,现在补一补,总结一下c#中常量的知识:

常量的声明方式: public const  datatype  name = value   

  •  常量隐含式静态的,所以不能再在声明上加上static关键字,如果试图是这样做,编译无法进行。
  • 在声明一个常量的时候必须给定一个值,不能在声明常量后又在程序的其他位置修改它的值
  • 常量的命名符合Pascal命名风格
  • 常量的值必须是在编译的时候可以计算的表达式。例如 public const int   a = 123+456 可以通过编译,而public const int a = Math.Sqrt(2.0);就无法通过编译,因为Math.Sqrt是一个方法,只能在运行时被调用。
  • 常量的类型必须是预定义数值类型(char,int,double,float,byte等)或者是string类型

 

抽象的过程

11月 5th, 2009

在做OO软件项目中,要做到理解面向对象对像我这样的初学者而言是比较困难的,下面就总结一下再项目初期将信息 进行抽象的过程,通过抽象,我们可以将信息得以简化:

  1. 通过抽象,将信息的特征概括出来
  2. 将信息模型组织为层次结构
  3. 抽象的重用。

Linux: the big picture

10月 20th, 2009

This article gives a brief introduction to Linux, with a sketch of the background history. It was written for PC Update, the monthly magazine of the PC user group in Melbourne, Australia. This version does not contain all the editorial changes and spelling fixes made by the magazine.

April 28, 2003

History Read more »

字符串填充函数(javascript实现)

09月 22nd, 2009

昨天js课上讲到这样一个字符串填充函数,上课老师讲的不是多么仔细,没怎么听懂,下课后研究一下,问了一下以前教c的老师,发现这个小技巧还是很优秀的,可以很大程度的减少循环的次数,从而大大的减少运算的时间。 Read more »

要开学了

08月 15th, 2009

还有半个月就又要开学了,慢慢的来学的时间也已经有一段时间了。每天做着自己喜欢做得事情,感觉倒还是蛮不错的。这个暑假,感觉我兑现了自己的诺言–创造了属于自己的奇迹。我们做得小视频会议软件,现在虽然还处在实验阶段(已经具体实施的步骤),不过感觉自己现在的这种状态很好,每天研究一点,把东西从无到有的给弄出来,感觉很cool。 Read more »

[转载]JMF系统介绍

08月 13th, 2009

一.简介 
1.1JMF 体系结构简介
在开发JMF 应用程序之前要完全理解JMF 的体系架构、接口和类。就拿我们的家用摄像机系统作个例子。首先用摄像机拍摄内容,拍摄下来的内容录制在DV带中。DV带可以放在放像机里播放、放像机提 供视频信号给电视机,提供音频信号给音箱,这样我们就可以在电视机上看到画面,从音箱里听到声音。JMF API 提供的也是同样的模型。 Read more »

PHP缓冲机制(转)

08月 8th, 2009

动态网站的内容加速显示十分重要,本文通过对 PHP 几个函数的深入讨论,提出了 PHP 网页压缩和缓冲的解决方案

Read more »

终于搞清楚了c#中的事件和委托

07月 25th, 2009

c#中的事件和委托,今天可算给搞明白了。比较高兴。嘿嘿。
理解c#中的事件和委托,关键还是要理解委托。要明白多播委托是怎么个玩意儿。现在把我自己写得一个例子,贴出来让大家看看,如果有什么不对的地方,希望指正。
狗饿 狗叫 给吃的。
public class Starter
{
public static void Main()
{
dog dog1 = new dog();
dog1.dogbark += new bark(Handler);
dog1.hungry();
}
public static void Handler(object o, DogEventArgs e)
{
Console.WriteLine(”给你一根骨头,吃吧。”);
}
}

public delegate void bark(object o, DogEventArgs e);
public class dog
{
public event bark dogbark;

public void hungry()
{
if (dogbark != null)
{
DogEventArgs args = new DogEventArgs();
dogbark(this, args);
}
}
}
public class DogEventArgs : EventArgs
{
}

其中我们将狗叫理解成引起事件的原因,狗叫理解成事件,给吃的理解成事件处理函数。对应代码就是:hungry()函数是引起事件的发生。dogbark是事件,Handler是事件处理程序。

单实例对象设计模式

06月 6th, 2009

单例模式是一种创建型模式,所谓创建型模式就是对实例的生成过程进行管理的一类模式。当编程的时候我们常常有一个这样的问题,我们需要写一个类,规定这个类只能产生一个实例,这个实例在全局被所有类都能够调用到,这个时候我们所使用的就是单例模式。
单实例对象设计模式提供了一个关于私有和静态构造函数的非常好的一个实例。下面我们看一个例子:

using System;
 
namespace Donis.CSharpBook
{
     public class Chessboard{
	private Chessboard(){}
	static Chessboard()
	{
	    board = new Chessboard();
	    board.start = DateTime.Now.ToShortTimeString();
	}
	public static Chessboard board = null;
	public string player1 ; 
	public string player2 ;
	public string start;
    }
    public class Game{
           public static void Main(){
   	Chessboard game = Chessboard.board;
	game.player1 = "sally";
	game.player2 = "Bob";
	Console.WriteLine("{0} played {1} at {2}",game.player1,game.player2,game.start);
          }
    }
}

在这个例子中。首先我们可以看到一个私有的构造函数,因为私有的构造函数本身是不能在类外部被访问的,那么就只有在类的内部进行访问了。于是看下面的静态构造函数中显示调用了私有构造函数,实例化了该类,并将它赋予静态成员 board.
这样就可以通过静态实例来访问类的实例成员(看这行代码:Chessboard game = Chessboard.board;),因为静态构造函数总是自动调用的。

让我们在看看下面这个JAVA的例子:

package src;
 
public class Stin {
    private Stin()//代码段1
    {
 
    }
    private static Stin stin;//代码段2
    public static Stin getStin()//代码段3
    {
        if(stin==null)//代码段4
        {
            stin=new Stin();//代码段5
        }
        return stin;
    }
}

在这段代码中我们可以看见一些与一般的类不同的地方,当然,单例规定的是所有类都可以调用到,那么这个类首先要是public属性。
首先看这个类的构造方法(代码段1),它的构造方法是一个私有的构造方法,我们知道私有构造方法的类是不能够外部被实例化的,这样的目的就使限制外部类使用new关键字来创建实例而达到实例不会被随意的创建出来(当然利用反射还是可以实例化的,这里只是一种编译上的限制)。那么既然外部不能够实例化,那就只好内部实例化了(代码段5)。
如果要被外部访问到,又不能外部实例化,要得到内部实例化的类就必须要是静态属性和静态方法,我们知道静态属性和方法可以通过类直接访问到而不用实例化,通过这一点我们可以获取到被类内部实例化的实例(代码段2和代码段3都是静态的)。当进入到实例生成的方法中判断是否已经生成实例(代码段4),如果没有就生成,如果有就直接返回,这样就实现了单例。在整个应用中只能生成一个实例,而生成的这一个实例能被应用中所有类调用到。
单例模式应用的场合和多,而且也有很多不同的变化。