002天(.net学习之路-C#基础知识)

news/2024/11/9 14:49:46

一.用面向对象的思想写一个猜拳游戏。

  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(除非子类也是抽象类)

抽象方法(成员)的只能出现在抽象类中。

 

转载于:https://www.cnblogs.com/lobe/archive/2013/05/12/3074806.html


http://www.niftyadmin.cn/n/2557068.html

相关文章

PMP-PMBOK-培训(12)Project Scheduling

To learn how to estimate project activity durations, develop a project schedule and track the progress of a project. 转载于:https://www.cnblogs.com/xuxiaoguang/archive/2008/12/12/1353746.html

fedora10安装配置心得

1.添加yum源:rpm -ivh http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpmrpm -ivh http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-stable.noarch.rpmrpm -Uvh http://livna-dl.reloumirrors.net/f…

链表求逆

链表求逆的关键点在于:如何得知 待处理 节点 的 前一个节点 1 link reverse(link x)2 {3 link r, y, t;4 5 y x;6 r NULL;7 8 while (y ! NULL)9 { 10 t y->next; 11 y t; 12 13 y->next r; 14 r …

为什么 我 的myeclipse调试的时候,有时鼠标放在变量上就显示变量值,有时就没有,提示不可以显示...

Window->Preferences->Java->Editor->Hovers 将[Variable Values]选择即可,如果第一个[Combined Hover]已经勾选,则将这个勾去掉,勾选[Variable Values]。如果还不行,就只能用ctrlshifti快捷键了。转载于:https://www…

洛谷 P1802 5倍经验日

题目背景 现在乐斗有活动了!每打一个人可以获得5倍经验!absi2011却无奈的看着那一些比他等级高的好友,想着能否把他们干掉。干掉能拿不少经验的。 题目描述 现在absi2011拿出了x个迷你装药物(嗑药打人可耻….),准备开始与那些人打…

日志(log4j2)

日志测试java代码如下:package com.learn.test;import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger;public class Test {public static void main(String[] args) {//创建日志记录Logger logger LogManager.getLogger(Test.class);logger.f…

webBrowser.DocumentText重新赋值无效解决方法

因为webBrowser这个控件的webBrowser.DocumentText是异步的,所以要自己调用刷新: webBrowser.Navigate("about:blank"); webBrowser.Document.OpenNew(false); webBrowser.Document.Write(html); webBrowser.Refresh(); 转载于:https://www.cn…

移除 API Hook

原文对付API-splicing的一种简单方法 [PSI_H] By: greatdong对于拦截API函数通常使用一种叫splicing的方法。此法的本质就是用JMP指令替换函数起始处的5个字节,将控制权传递给拦截程序。这种技术广泛应用于个人防火墙中,以防木马程序将自己的代码注入到其…