黑马程序员 浅谈封装的具体实现的几种例子

本文详细阐述了面向对象编程中封装的四种常见形式:属性封装、方法参数封装、代码功能封装、类功能封装,通过实例展示了每个概念的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

可能很多人学了面向对象概念后,对封装只是一个模糊的理解,大概知道是怎么回事,但又说不出用的地方,本人小小的总结了一下:

1、属性封装了字段

例子:

class Program
    {
        static void Main(string[] args)
        {
            Class1 c = new Class1();
            c.Name="张源";
            Console.WriteLine(c.Name);
            Console.ReadKey();
        }
    }


    public class Class1 
    {
        private string _name;
        public string Name 
        {
            //get { return _name;}
            get { return File.ReadAllText(@"d:\属性封装测试.txt",Encoding.UTF8); }
            //set { _name=value;}
            set { File.WriteAllText(@"d:\属性封装测试.txt",value); }
        }
    }

如Class1所示:不管属性Name内部set和get方法做了什么,对于控制台端来说,用户输入一个字符串后,在主程序中调用Name属性,都能打印出相同的结果来!!   有此例1就说明了 属性封装了字段。。

2、方法的多个参数封装成了一个对象

例子:(此例子是用winForm做的,主要功能就是点击美女年龄后出现美女的年龄,如下图:)


代码如下: private void Form1_Load(object sender, EventArgs e)
        {
            Beautiful Women1 = new Beautiful() {Name="古力娜扎",Age=22 };
            Beautiful Women2 = new Beautiful() {Name="刘亦菲",Age=25 };
            Beautiful Women3 = new Beautiful() { Name = "董洁", Age = 30 };
            Beautiful Women4 = new Beautiful() { Name = "白姑娘", Age = 23 };
            comboBox1.Items.Add(Women1);
            comboBox1.Items.Add(Women2);
            comboBox1.Items.Add(Women3);      //默认调用的就是ToString()方法
            comboBox1.Items.Add(Women4.ToString());
        }


        private void btn_Click(object sender, EventArgs e)
        {
            Beautiful b=(Beautiful)comboBox1.SelectedItem;    //
            MessageBox.Show(b.Name+"--------"+b.Age.ToString());
        }


 class Beautiful
    {
        public string Name
        {
            get;
            set;
        }
        public int Age
        {
            get;
            set;
        }
        public override string ToString()    //重写string的Tostring方法
        {
            return Name;
        }
    }


定义一个Beautiful类,在给下拉列表添加条目是,考虑到到时候要打印出美女名字和年龄,所以此处的两个参数必须变成一个,就想到了类类型的变量,Beautiful类型的变量相当于代替了美女的名字和年龄两个变量。 由此例可得出方法的多个参数封装成一个参数。!

3.将一堆代码封装到一个方法中

此种情况是我们在面向对象里面遇到最多的,当我们实验某一种功能时,可能在好多地方都要用到此功能,那么我们就可一将这段功能代码封装到一个方法中,以后用的时候只要调用这个方法就可以了!!

4、将一些功能封装到几个类中

例:(猜拳游戏,三个对象,玩家,电脑,裁判,分别抽象出并定义三个类,并在类里面定义各自的相应的方法)

代码如下:

(1)裁判类: class CanPaun
    {
        public enum state 
        {
            YouWin,
            YouShu,
            PingShou
        };
        public static string CanPanJieGuo(int PlayerJieGuo, int ComJieGuo)
        {
            string result=string.Empty;
            if (PlayerJieGuo == ComJieGuo)
            {
                result=state.PingShou.ToString();
            }
            else if ((PlayerJieGuo - ComJieGuo == -1) || (PlayerJieGuo - ComJieGuo==2))
            {
                result = state.YouWin.ToString();
            }
            else
            {
                result = state.YouShu.ToString();
            }
            return result;
        }
    }

(2)玩家类:class Player
    {
        public string PlaryerJieGuo
        {
            get;
            set;
        }
        public int num;


        public void   PlayerFun(string p) 
        {
          
            switch (p)
            {
                case"石头":
                    num = 1;
                    break;
                case "剪刀":
                    num = 2;
                    break;
                case "布":
                    num = 3;
                    break;
                default:
                    break;
            }
            PlaryerJieGuo = p;
            //return p;
        }
    }

(3)电脑类:class Computer
    {
        public string ComJieGuo
        {
            get;
            set;
        }
        public int Num
        {
            get;
            set;
        }
        public void  ComFunc() 
        {
            Random rd = new Random();
            int num=rd.Next(1,4);
            switch (num)
            {
                case 1:
                    ComJieGuo = "石头";
                    break;
                case 2:
                    ComJieGuo = "剪刀";
                    break;
                case 3:
                    ComJieGuo="布";
                    break;
                default:
                    break;
            }
            Num = num;


        }
    }

主程序代码:  private void ntnTone_Click(object sender, EventArgs e)
        {
            Button btn=(Button)sender;
            //玩家出
            Player p = new Player();
           
            p.PlayerFun(btn.Text);
            lbplayerjieguo.Text=p.PlaryerJieGuo;
            //电脑自己出
            Computer cm = new Computer();
            cm.ComFunc();
            lbcomputerjieguo.Text = cm.ComJieGuo;
            //裁判
            string result = CanPaun.CanPanJieGuo(p.num, cm.Num);
            label5.Text = result;
        }

由此例可解释将一些功能封装到几个类中


上面就是小结的常见的封装的几种形式,希望大家多多支持!!




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值