一.用面向对象的思想写一个猜拳游戏。
1、电脑(Computer类) 拳(字段) 出拳(方法)
代码
class Compute { string fist; public string Fist { get { return fist; } set { fist = value; } } public int ShowFist() { Random s = new Random(); int text=s.Next(1, 4); this.fist = GuiZe.HuanSuan(text); return text; } }
2、玩家(Player类) 拳(字段) 出拳(方法)
View Code
class Player { private string fist; public string Fist { get { return fist; } set { fist = value; } } public int ShowFist(string text) { this.fist = text; return GuiZe.HuanSuan(text); } }
3、裁判(CaiPan类) 结果(方法)
View Code
class CaiPan { public string PanDin(int player,int computer) { //1 剪刀 2 石头 3 布 int zhi=player-computer; if (zhi == 0) { return "平"; } else if (zhi == 1 || zhi == -2) { return "YOU Win!"; } else { return "YOU LOST!"; } } }
4、规则(GuiZe类) 规则换算(方法)
View Code
static class GuiZe { public static int HuanSuan(string text) { //1 剪刀 2 石头 3 布 if (text =="剪刀") { return 1; } else if (text == "石头") { return 1; } else if (text == "布") { return 1; } else { return -1; } } public static string HuanSuan(int text) { //1 剪刀 2 石头 3 布 if (text == 1) { return "剪刀"; } else if (text == 2) { return "石头"; } else if (text ==3) { return "布"; } else { return "-1"; } } }
窗体代码:
1 public Form1() 2 { 3 InitializeComponent(); 4 } 5 6 private void bnt_JianDao_Click(object sender, EventArgs e) 7 { 8 9 Button btn = sender as Button; 10 WinLost(btn.Text); 11 } 12 13 private void WinLost(string text) 14 { 15 Compute com = new Compute(); 16 Player py = new Player(); 17 CaiPan cp = new CaiPan(); 18 lbl_Result.Text = cp.PanDin(py.ShowFist(text), com.ShowFist()); 19 lbl_Computer.Text = com.Fist; 20 lbl_Player.Text = py.Fist; 21 } 22 23 private void bnt_ShiTou_Click(object sender, EventArgs e) 24 { 25 Button btn = sender as Button; 26 WinLost(btn.Text); 27 } 28 29 private void bnt_Bu_Click(object sender, EventArgs e) 30 { 31 Button btn = sender as Button; 32 WinLost(btn.Text); 33 } 34 }
二.封装.继承.多态
1、类的单根继承性
2、所有的类都直接或间接的继承自object。
3、构造函数无法继承,子类构造函数必须指明调用父类哪个构造函数
4、public 任何地方
5、private 当前类中可以访问
6、protected 当前类及子类中可以访问
7、*internal 当前程序集可以访问
三、静态成员 实例成员
1、静态成员属于类所有,非静态成员属于类的实例所有
2、C#静态方法属于类所有,类实例化前即可使用
3、在实例方法中可以直接调用静态方法,
4、在静态方法中不可以直接调用实例方法
5、静态方法和静态变量创建后始终使用同一块内存(静态存储区),而使用实例的方式会创建多个内存
四、多态
多态就是指不同对象收到相同消息时,会产生不同行为,同一个类在不同的场合下表现出不同的行为特征
里氏替换原则
•父类引用指向子类对象
•父类对象不能够替换子类
is-a 关键字as is
怎么实现多态1-抽象类abstract
抽象类定义的是公共的实现和能力
抽象类不能被实例化
抽象类为子类提供所需要的成员
抽象类中的成员既可以有实现也可以无实现
抽象类必须由其子类实现它的抽象成员(除非子类也是抽象类)
一个类只能继承一个抽象类(类的单根继承性)
抽象方法(成员)不能有实现,必须被子类重写override(除非子类也是抽象类)
抽象方法(成员)的只能出现在抽象类中。