现在是北京时间2014年9月3日11:19:59,忙碌了快一个星期的工作也差不多有点时间剩余下来复习一下之前看到过的一些基础知识了。
今天在这里复习一下C#的OOP的一些知识。
OOP:
Object Oriented Programming,面向对象的程序设计。所谓“对象”在显式支持面向对象的语言中,一般是指类在内存中装载的实例,具有相关的成员变量和成员函数(也称为:方法)。
OOP 达到了软件工程的三个主要目标:重用性、灵活性和扩展性。
OOP的三大主要特性,封装、继承、多态。
类:
简单的说,类就是一种用户定义的数据类型,跟结构类似;并且,类具有自己的成员变量和成员函数(方法),通过它们可以对类自身进行操作。如:汽车可以看作是发动机、车轮、座椅等诸如此类的集合。也可以从功能的角度来研究,譬如,能移动,加速,减速,刹车等。
例如:
<span style="font-family:Microsoft YaHei;">class MyClass1
{
//构造函数,若无自动产生
MyClass1()
{
}
//字段
private string name;
//属性
public string Name
{
get { return name; }
set { name = value; }
}
//C#3.5之后可简写成
public string Name { get; set; }
//方法
public void WriteName()
{
Return name;
}
}</span>
Class A
{
public void say()
{
Console.WriteLine("Hello A.");
}
}
Class B :A
{
}
class Test
{
static void main(string[] arg)
{
B b = new B();
B.say();
}
}
多态:
重载
如果函数有相同的名称和返回值,而有不同的参数个数或参数类型,则这些函数就是重载函数。
重写
重写是指继承中具有父子关系的两个类,子类重写父类中的方法,但是要求,父类中的方法必须是抽象的或虚方法,子类才可以重写,其它无修饰的方法不可以重写,可以继承或覆盖。
override 修饰符表示派生类的方法或属性,这个派生类代替基类中具有相同的名称和签名的类。要被重写的基方法必须声明为 virtual、abstract 或 override:以这种方式重写非虚方法或静态方法是不可能的。
例如:
Class A
{
public virtual void Say()
{
Console.WriteLine("A.Say().");
}
}
Class B : A
{
public override void Say()
{
Console.WriteLine("B.Say().")
}
}
Class Test
{
static void main(string[] args)
{
B b = new B();
b.Say();
A a = b;
a.Say();
}
}
//B.Say();
//B.Say();
接口:
1. 接口是一个引用类型,通过接口可以实现多重继承。
2. C#中接口不能有new、public、protected、internal、private等修饰符。
3. 接口中只能声明"抽象"成员(所以不能直接下一步对接口进行实例化(即不能使用new操作符声明一个接口的实例对 象)),而不能声明共有的域或者私有的成员变量。
4. 接口声明不包括数据成员,只能包含方法、属性、事件、索引等成员。
5. 接口名称一般都以“I”作为首字母(当然不这样声明也可以),这也是接口和类的一个区别之一。
6. 接口成员的访问级别是默认的(默认为public),所以在声明时不能再为接口成员指定除public外的任何访问修饰符,否则 编译器会报错。
7. 接口成员不能有static、abstract、override、virtual修饰符,使用new修饰符不会报错,但会给出警告说不需要关键字new。
8. 在声明接口成员的时候,不准为接口成员编写具体的可执行代码,也就是说,只要在对接口进行声明时指明接口的成员名称和参数就可以了。
9. 接口一旦被继承,子类需要把接口中所有成员实例化(通过具体的可执行代码实现接口抽象成员的操作)。
例如:
interface IPoint
{
int x { get; set; }
int y { get; set; }
}
class CPoint : IPoint
{
private int _x;
private int _y;
//构造函数
public CPoint(int x, int y)
{
_x = x;
_y = y;
}
//属性成员
public int x
{
get { return _x; }
set { _x = value; }
}
public int y
{
get { return _y; }
set { _y = value; }
}
}
class Program
{
public static void PrintPoint(Point p)
{
Console.WriteLine("x = {0}, y = {1}.", p.x, p.y);
}
static void main(string[] args)
{
CPoint p = new CPoint(2, 3);
Console.Write("My Point is ");
PrintPoint(p);
Console.ReadKey();
}
}
//My Point is x = 2, y = 3.
还有一些反射,委托,事件,设计模式等等将在接下来的时间内学习&&复习。
刚巴蝶~