例子16:
using System;
using System.IO;
public class FileApp
{
public static void Main()
{
// 在当前目录创建一个文件myfile.txt,对该文件具有读写权限
FileStream fsMyfile = new FileStream("myfile.txt" , FileMode.Create, FileAccess.ReadWrite);
// 创建一个数据流写入器,和打开的文件关联
StreamWriter swMyfile = new StreamWriter(fsMyfile);
// 以文本方式写一个文件
swMyfile.WriteLine("Hello, World");
swMyfile.WriteLine("abcdefghijklmnopqrstuvwxyz");
swMyfile.WriteLine("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
swMyfile.WriteLine("0123456789");
// 冲刷数据(把数据真正写到文件中去)
// 注释该句试试看,程序将报错
swMyfile.Flush();
// 以文本方式读文件
// 创建一个数据流读入器,和打开的文件关联
StreamReader srMyfile= new StreamReader(fsMyfile);
// 把文件指针重新定位到文件的开始
srMyfile.BaseStream.Seek(0, SeekOrigin.Begin);
// 打印提示信息
Console.WriteLine("****************以文本方式读文件*********************");
// 打印文件文本内容
string s1;
while((s1 = srMyfile.ReadLine())!=null)
{
Console.WriteLine(s1);
}
Console.WriteLine();
// 以文本方式读文件结束
// 以二进制方式读文件
// 创建一个二进制数据流读入器,和打开的文件关联
BinaryReader brMyfile= new BinaryReader (fsMyfile);
// 把文件指针重新定位到文件的开始
brMyfile.BaseStream.Seek(0, SeekOrigin.Begin);
// 打印提示信息
Console.WriteLine("****************以二进制方式读文件*********************");
// 打印文件文本内容
Byte b1;
while(brMyfile.PeekChar()>-1)
{
b1=brMyfile.ReadByte();
// 13为"n",表示回车;10为"r",表示换行
if(b1 != 13 && b1 != 10)
{
Console.Write("{0}",b1.ToString());
Console.Write(".");
}
else
{
Console.WriteLine();
}
}
Console.WriteLine("n");
// 以二进制方式读文件结束
// 关闭以上new的各个对象
brMyfile.Close();
swMyfile.Close();
srMyfile.Close();
fsMyfile.Close();
// 读取文件属性
// 打印提示信息
Console.WriteLine("****************读取文件属性*********************"); FileInfo fiMyfile=new FileInfo("myfile.txt");
Console.WriteLine("文件名 : {0}",fiMyfile.Name); Console.WriteLine("文件名(含路径) : {0}",fiMyfile.FullName); Console.WriteLine("文件大小(bytes) : {0}",fiMyfile.Length);
Console.WriteLine("文件创建时间 : {0}",fiMyfile.CreationTime); }
}
例子17:
using System;
using System.IO;
public class Person
{
// 枚举类型,用于表示性别。为节省内存,使用byte。
public enum Sex : byte
{
Male = 0, Female
}
// 私有属性:姓名,性别,年龄,身高,体重
private string name;
private Sex sex;
private byte age;
private float height;
private float weight;
// 构造函数,只用一个属性:姓名
public Person(string sName)
{
name = sName;
}
// 构造函数2,支持两个属性:姓名,性别 public Person(string sName, Sex cSex) {
name = sName;
sex = cSex;
}
// 设置年龄
public void setAge(byte bAge)
{
age = bAge;
}
// 设置性别,参数为枚举类型Sex public void setSex(Sex cSex)
{
sex = cSex;
}
// 重载设置性别的方法,参数为byte public void setSex(byte bSex)
{
sex = (Sex)bSex;
}
// 设置身高
public void setHeight(float fHeight) {
height = fHeight;
}
// 设置体重
public void setWeight(float fWeight)
{
weight = fWeight; }
// 得到姓名
public string getName() {
return name; }
// 得到年龄
public byte getAge() {
return age; }
// 得到性别
public Sex getSex() {
return sex; }
// 得到身高
public float getHeight() {
return height; }
// 得到体重
public float getWeight() {
return weight; }
}
public class MyClass {
public static void Main()
{
// 实例化一个人,设置各项属性 Person p1 = new Person("李娟"); p1.setSex((byte)1);
p1.setAge(19);
p1.setHeight((float)1.68);
p1.setWeight(45);
// 实例化另一个人,设置各项属性 Person p2 = new Person("张建国", 0); p2.setAge(25);
p2.setHeight((float)1.75);
p2.setWeight(74);
// 打印出两人的属性
Console.WriteLine("{0}t{1}t{2}t{3}t{4}", p1.getHeight(), p1.getWeight());
Console.WriteLine("{0}t{1}t{2}t{3}t{4}", p2.getHeight(), p2.getWeight());
}
}
例子18:
using System;
class Rectangle
{
private int iHeight;
private int iWidth;
// 缺省构造函数
public Rectangle()
{
Height=0;
Width=0;
} p1.getName(), p2.getName(), p1.getSex(), p2.getSex(), p1.getAge(), p2.getAge(),
// 构造函数重载
public Rectangle(int w,int h) {
Width=w;
Height=h;
}
// 属性:宽 的get和set访问器 public int Width
{
get
{
return iWidth;
}
set
{
iWidth=value;
}
}
// 属性:高 的get和set访问器 public int Height
{
get
{
return iHeight; }
set
{
iHeight=value; }
}
// 属性:面积 的get访问器 public int Area
{
get
{
return Height*Width;
}
}
// 重载操作符 ==
public static bool operator==(Rectangle a,Rectangle b) {
return ((a.Height==b.Height)&&(a.Width==b.Width)); }
// 重载操作符 !=
public static bool operator!=(Rectangle a,Rectangle b) {
return !(a==b);
}
// 重载操作符 >
public static bool operator>(Rectangle a,Rectangle b) {
return a.Area>b.Area;
}
// 重载操作符 <
public static bool operator<(Rectangle a,Rectangle b) {
return !(a>b);
}
// 重载操作符 >=
public static bool operator>=(Rectangle a,Rectangle b) {
return (a>b)||(a==b);
}
// 重载操作符 <=
public static bool operator<=(Rectangle a,Rectangle b) {
return (a<b)||(a==b);
}
// 重载ToString
public override String ToString()
{
return "高=" + Height + ",宽=" + Width;
}
public static void Main()
{
// 实例化三个矩形并设置各自属性
Rectangle objRect1 =new Rectangle();
Rectangle objRect2 =new Rectangle();
Rectangle objRect3 =new Rectangle(10,15); objRect1.Height=15;
objRect1.Width=10;
objRect2.Height=25;
objRect2.Width=10;
// 打印三个矩形的信息
// 其中调用了ToString方法
Console.WriteLine("矩形#1 " + objRect1);
Console.WriteLine("矩形#2 " + objRect2);
Console.WriteLine("矩形#3 " + objRect3);
// 使用重载后的操作符比较矩形并打印结果 if(objRect1==objRect2)
{
Console.WriteLine("矩形#1和矩形#2高和宽都相等"); }
else
{
if(objRect1>objRect2)
{
Console.WriteLine("矩形1大于矩形2");
}
else
{
Console.WriteLine("矩形1小于矩形2"); }
}
if(objRect1==objRect3)
{
Console.WriteLine("矩形1和矩形3高和宽都相等"); }
else
{
Console.WriteLine("矩形1和矩形3不相等"); }
}
}
例子19:
// Stack名字空间
namespace Stack
{
using System;
public class Stack
{
// first: 栈最上面一个节点
private Node first = null;
// count: 栈中节点的数量
private int count = 0;
// 判空属性,提供get访问器
public bool Empty
{
get
{
return (first == null);
}
}
// 计数属性,提供get访问器
public int Count
{
get
{
return count;
}
}
// 压栈操作,注意返回object
public object Pop()
{
if (first == null)
{
throw new InvalidOperationException ("Cant pop from an empty stack"); }
else
{
object temp = first.Value;
first = first.Next;
count--;
return temp;
}
}
// 弹栈操作,返回空
public void Push(object o)
{
first = new Node(o, first);
count++;
}
// 节点类
class Node
{
// 节点有两个属性:自己、指向下一个节点
public Node Next;
public object Value;
public Node(object value) : this(value, null) {}
public Node(object value, Node next)
{
Next = next;
Value = value;
}
}
}
class StackApp
{
static void Main()
{
Stack s = new Stack();
if (s.Empty)
Console.WriteLine("堆栈为空");
else
Console.WriteLine("堆栈非空");
// 往栈中压入5个节点
for (int i = 0; i < 5; i++)