可能很多人学了面向对象概念后,对封装只是一个模糊的理解,大概知道是怎么回事,但又说不出用的地方,本人小小的总结了一下:
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;
}
由此例可解释将一些功能封装到几个类中
上面就是小结的常见的封装的几种形式,希望大家多多支持!!