C#视频看完了,但是有些稀里糊涂,云里雾里的感觉。接下来学习设计模式,进一步加深理解吧。学习完C#,总体回忆一下所讲的内容我觉得还主要讲的是面向对象的知识吧,对于面向对象,以前我只知道抽象、继承、多态,后来又知道了封装,抽象类和接口,这次看视频又新认识到了构造方法,方法重载等等,通过看视频更加了解到了这些很抽象的词通过代码到底是如何具体实现的。突然觉得老师讲课也挺不容易的,举得例子太深了吧,有很多不理解。举得太简单了吧又不能反映出在实际中的应用,不能学到更多的知识。我们写代码时也是要先考虑到都有哪些类,有具体框架,定义类,最后才是写main()函数。个人觉得大话设计模式更容易理解一些,下面以设计模式中的附录为例说说面向对象的各种概念及代码。
一、定义类与实例化
类:关键字:class;名称首字母要大写,多个单词则首字母大。对外公开的方法用“public”修饰符
实例化:关键字new;就是创建对象的过程
“类”其实就是一个模板,比如“学生”;实例化就是创建一个对象,给它分配一定的内存空间,例如 创建一个学生对象 A;"初始化"就是赋值,比如给学生A 赋值:姓名“张三”,年龄“22”等等
<span style="font-size:14px;"> class cat //声明猫类
{
public string Shout() //声明猫叫的方法
{
return "喵";
}
}
private void button1_Click(object sender, EventArgs e)
{
cat cat = new cat(); //将Cat实例化,Cat的对象命名为cat
MessageBox.Show(cat.Shout()); //此时就可以让小猫Cat.Shout()了,在任何需要需要小猫叫的地方都可以实例化它。
}</span>
运行结果:
二、构造方法与方法重载
构造方法类似于VB中的函数在上文代码中的Cat cat = new Cat()中new后面的Cat()就是构造方法,在C#中所有的类都有构造方法,如果你不编码则系统默认生成空的构造方法,若你有定义的构造方法,那么默认的构造方法就会失效了。
<span style="font-size:14px;"><span style="white-space:pre"> </span>class Cat //声明猫类
{
private string name = ""; //声明cat类的私有字符串变量name
<span style="color:#ff0000;"> public Cat(string name) //定义Cat类的构造方法,参数是输入一个字符串name,相当于VB中的形参
{
this.name = name; //将参数值赋给上面定义的私有变量name
}
</span>
public string Shout() //声明猫叫的方法
{
return "我的名字叫"+name+"喵";
}
}
private void button1_Click(object sender, EventArgs e)
{
<span style="color:#ff0000;">Cat cat = new Cat("咪咪"); //”咪咪“则相当于实参</span>
MessageBox.Show(cat.Shout()); //此时就可以让小猫Cat.Shout()了,在任何需要需要小猫叫的地方都可以实例化它。
}</span>
运行结果如下:再来说说方法重载,我个人理解就是一个方法执行多次。方法重载提供了创建同名的多个方法的能力,但这些方法需要使用不同的参数类型。
如上面构造方法重载得到如下代码
<span style="font-size:14px;"> class Cat //声明猫类
{
private string name = ""; //声明cat类的私有字符串变量name
<span style="color:#ff0000;">public Cat(string name) //定义Cat类的构造方法,参数是输入一个字符串name,相当于VB中的形参</span>
{
this.name = name; //将参数值赋给上面定义的私有变量name
}
<span style="color:#ff0000;"> public Cat() //将构造方法重载
{
this.name = "无名";
}</span>
public string Shout() //声明猫叫的方法
{
return "我的名字叫"+name+"喵";
}
}
private void button1_Click(object sender, EventArgs e)
{
<span style="color:#ff0000;"> Cat cat = new Cat(); //这样即使没有name也不会报错,自动起名为“无名”</span>
MessageBox.Show(cat.Shout()); //此时就可以让小猫Cat.Shout()了,在任何需要需要小猫叫的地方都可以实例化它。
}</span>
运行结果如下:
三、属性与修饰符
属性:以前我们说属性就是一个人的姓名,年龄,性别等等用来描述一个人的,学过数据库以后我们知道属性就是数据库表中的字段,如果把数据库中的每一张表都想成一个类,那么可以说每个字段都是这个类的一个属性。
属性有两个方法get和set。get相当于只读,set就像它的意思可以自己设置属性值。
代码和上面相同部分就不再贴出
<span style="font-size:14px;"> <span style="color:#ff0000;">private int shoutNum = 3;
public int ShoutNum</span>
{
get //表示外界调用时可以得到shoutNum的值默认为3
{
return shoutNum;
}
set //表示外界可以给内部的shoutNum赋值
{
if (value <= 10) //控制猫叫次数,最多只能叫10声
shoutNum = value;
else
shoutNum = 10;
}
}
public string Shout() //声明猫叫的方法
{
string result = ""; //声明字符串类型的result,用来记录猫叫次数的结果
for (int i = 0; i < shoutNum; i++)
{
result += "喵 ";
}
return "我的名字叫" + name + result ;
}
}
private void button1_Click(object sender, EventArgs e)
{
Cat cat = new Cat("咪咪"); //”咪咪“则相当于实参
<span style="color:#ff0000;"> cat.ShoutNum = 5; //给属性赋值</span>
MessageBox.Show(cat.Shout()); //此时就可以让小猫Cat.Shout()了,在任何需要需要小猫叫的地方都可以实例化它。
}</span>
运行结果:
四、封装
封装:每个对象都包含它能进行的操作所需要的所有信息,这个特称为封装。因此对象不必依赖其他对象来完成自己的操作。就以我们每个人为例,张三有张三的属性和方法,李四有李四的方法和属性,他们是两个独立的个体。在上例中就实现了对咪咪的封装。就先写到这里吧,一篇博客写得太长了也不太好,下次再写继承多态等等
总结:只有我们深入进去敲代码的时候才能体会到其中的快乐!