C#设计模式(类与对象)
1.面向过程的程序设计与面向对象的程序设计的区别就在于类的出现.
2.类就相当与一个模块,其中包括私有方法,公有方法,属性和成员数据等信息;
下面一个例子可以很清晰的说明面向对象的设计思想:
假设我们将一场游泳比赛的结果存储在一个文本数据文件中,我们要执行的操作就是需要从文本文件中取出每一行的数据,并输出每个人的成绩.
设计思路:
1.设计一个组织运动员数据的类,通过该类可以得出运动员的几个属性(针对名称,年龄,俱乐部,时间这些属性,我们必须要将其封装到一个类中去,称为Swimmer.cs).
2.在获取这些属性时,需要考虑到每行记录中空格问题,时间的转换问题,字符串分割问题(针对每一个问题我们都要考虑封装到一个类中,称为StringTokenizer.cs).
3.在打开文件时需要进行打开读取操作和一次读取一行操作(针对这个问题又应该封装到一个类中对文件进行操作,称为csFile.cs);
csFile.cs类的代码:
using System;
using System.IO ;
namespace SwimmerTokenizer
{
/// <summary>
/// A simple interface to file IO methods
/// </summary>
public class csFile {
private File fl;
private StreamReader ts;
public csFile(string filename)
{
ts = File.OpenText (filename);
}
public string readLine() {
return ts.ReadLine ();
}
public void close() {
ts.Close ();
}
}
}
Simmer.cs类的代码:
using System;
using CsharpPats;
namespace SwimmerTokenizer
{
/// <summary>
/// Summary description for Swimmer.
/// </summary>
public class Swimmer
{
private string frName, lName;
private string club;
private int Age;
private int place;
private FormatTime tms;
//-----------
public Swimmer(String dataLine) {
StringTokenizer tok = new StringTokenizer (dataLine);
place = Convert.ToInt32 (tok.nextElement()); //指向下一个有效的字符
frName = tok.nextElement ();
lName = tok.nextElement ();
string s = tok.nextElement ();
Age = Convert.ToInt32 (s);
club = tok.nextElement ();
tms = new FormatTime (tok.nextElement ());
}
//-----------
public string name {
get{
return frName+" "+lName;
}
}
//-----------
public string time {
get{
return tms.getTime();
}
set {
tms = new FormatTime (value);
}
}
//-------------------
//age property
public int age {
get {
return Age;
}
set {
Age = value;
}
}
}
}
StringTokenizer.cs的代码:
using System;
namespace CsharpPats
{
//该类是用来处理字符串操作的
//String Tokenizer class
public class StringTokenizer {
private string data, delimiter;
private string[] tokens;
private int index;
public StringTokenizer(string dataLine) {
init(dataLine, " ");
}
private void init(String dataLine, string delim) {
delimiter = delim;
data = dataLine;
tokens = data.Split (delimiter.ToCharArray() );
index = 0;
}
public StringTokenizer(string dataLine, string delim) {
init(dataLine, delim);
}
public bool hasMoreElements() {
return (index < (tokens.Length));
}
public string nextElement() {
string s = tokens[index++];
while((s.Length <=0) && (index<tokens.Length ))
s = tokens[index++];
return s;
}
}
}
浙公网安备 33010602011771号