万丈高楼平地起,勿在浮沙筑高台。不知道是不是由于之前VB基础没打好的原因,自从开到C#这就遇到了不少困难,当然了,困难虽然是暂时的,但总得去解决不是,只好通过不断地学习和总结来加深印象,夯实基础,争取厚积薄发。
封装、继承和多态是面向对象的三大特性,因此从C#的角度对这三大特性进行一个简单总结。
一、封装
首先封装相信大家都不会陌生了吧,就像看电视一样,不需要知道电视是怎么搜索频道,怎么成像的,只要把电视当成娱乐的对象,知道怎么用就可以了,这就是面向对象中封装的特点,也就是说每个对象都包含它能进行操作所需要的所有信息。因此对象不必依赖其他对象来完成自己的操作。这样方法和属性包装在类中,通过类的实例来实现。
封装的好处:
1、良好的封装能够减少耦合
2、类内部的实现可以自由地修改
3、类具有清晰的对外接口
下面通过两种方法来进行数据的封装:
(一、)用传统的读、写方法封装
public class cat
{
private string name;
public string Getname() //读方法
{
return name;
}
public void Setname(string aa) //写方法
{
name = aa;
}
static void Main(string[] args)
{
cat a = new cat(); //将cat类实例化
a.Setname("咪咪");
Console.WriteLine(a.Getname());
}
} 通过读写的方法可以保护私有数据不被外部数据所破坏,上面例子中name的修饰符是private,只能通过读写的方法访问类cat的name(二、)用属性实现封装
public class cat
{
private string name;
public string Name
{
get //读
{
return name;
}
set //写
{
name=value;
}
}
}
public class catmain
{
public static int Main(string[]args)
{
cat a = new cat(); //将cat类实例化
a.Name ="咪咪";
Console.WriteLine(a.Name); //输出cat
return 0;
}
} 通过上面的例子,可以看出属性具有两种操作get和set,get用来返回属性域的值,set通过value这个变量来给属性域赋值。二、继承
继承楚广明老师也解释的相当明白了,就像无论电视机如何发展,声音图像等基本功能是延续不变的,这在面向对象理论中就是继承。继承定义了类如何相互关联、共享特性,子类不但继承了父类的所有特性,还可以定义新的特性。但对于构造函数,它不能被继承,只能被调用。
继承的优点:继承使得所有子类公共的部分都放在了父类,使得代码得到了共享,避免了重复,同时,继承使修改或扩展继承而来的实现较为容易。
public class Person //定义Person类
{
string _name;
public string Name //定义name属性
{
get { return _name; }
set { _name = value; }
}
int _age;
public int Age //定义Age属性
{
get { return _age; }
set { _age = value; }
}
public void show() //定义方法
{
Console.WriteLine("这是人");
}
}
public class Student:Person //Student类继承Person类
{
public void sayhi() //Student类的方法
{
Console.WriteLine("我是学生,我叫{0},{1}岁了",this.Name ,this.Age );
}
}
class Program
{
static void Main(string[] args)
{
//Person p = new Person();
Student s = new Student(); //实例化Student类
s.Name = "旺旺";
s.Age = 20;
s.sayhi();
}
}上面的例子中Student子类继承了Person父类的name和age属性以及show方法,同时Student类还可以定义自己的方法属性,这实现了子类对父类的继承。
对于构造函数,则只能被调用,而不能继承,可以使用base关键字调用基类的构造函数。
public class Person
{
public string _name;
public int _age;
public Person(string name, int age) //构造函数
{
this._name = name;
this._age = age;
}
}
public class Student : Person
{
private int _id;
public Student(string name, int age, int id)
: base(name, age) //调用Person类的构造函数
{
this._id = id;
Console.WriteLine(_id); //Student类方法
}
}
class Program
{
static void Main(string[] args)
{
Student objStudent = new Student("旺旺", 20, 1);
}
}C#中类的继承需要遵循以下原则:
1、派生类只能继承于一个基类
2、派生类自然继承基类的成员,但不能继承基类的构造函数成员
3、类的继承可以传递
4、派生类湿度基类的扩展,但不能消除已继承的基类成员
5、派生类中如果声明了与基类同名的成员,基类的同名成员会被覆盖,从而不能直接访问同名的基类成员
6、基类可以定义虚方法成员等,这样派生类能够重载这些成员表现出类的多态性
三、多态
其实本篇文章应把多态总结上的,但由于多态涉及到了虚方法、重载和覆写等,所以就总结在下篇博客中吧。