C#基础学习(二)
2014-09-03 11:18
190 查看
现在是北京时间2014年9月3日11:19:59,忙碌了快一个星期的工作也差不多有点时间剩余下来复习一下之前看到过的一些基础知识了。
今天在这里复习一下C#的OOP的一些知识。
OOP:
Object Oriented Programming,面向对象的程序设计。所谓“对象”在显式支持面向对象的语言中,一般是指类在内存中装载的实例,具有相关的成员变量和成员函数(也称为:方法)。
OOP 达到了软件工程的三个主要目标:重用性、灵活性和扩展性。
OOP的三大主要特性,封装、继承、多态。
类:
简单的说,类就是一种用户定义的数据类型,跟结构类似;并且,类具有自己的成员变量和成员函数(方法),通过它们可以对类自身进行操作。如:汽车可以看作是发动机、车轮、座椅等诸如此类的集合。也可以从功能的角度来研究,譬如,能移动,加速,减速,刹车等。
例如:
对象 :
对象就是类的实例。类与对象的关系就如类型和变量的关系,所有对类的操作都必须通过对象来实现。当一个类定义了多个对象时,每个对象拥有各自的成员数据。
类的三种成员类型:
1) 私有成员(private):缺省情况下,一个类中的所有成员都是私有的。私有成员只能被类本身的成员函数访问。能够被继承但是被继承的私有成员不能够使用。
2) 公有成员(public):公有成员可以被类成员函数和外部函数使用。
3) 保护成员(protected):类的保护成员能被类及其派生类的成员函数和友员函数使用,具有继承性。
构造函数与析构函数 :
1)构造函数
a. 是特殊的成员函数;在创建对象时首先由系统自动调用。它的作用是为新创建的对象分配空间,或为该对象的成员变量赋值等;
b. 构造函数名必须与其类名称完全相同,并且不允许有返回值。
2)析构函数
a. 析构函数是构造函数的逆操作;
b. 析构函数在类名之前加~来命名,它不允许有返回值,也不允许带参数,并且一个类只能有一个析构函数。
继承:
从一个基类中派生出的一个新的类,C#并不支持多重继承.
多态:
重载
如果函数有相同的名称和返回值,而有不同的参数个数或参数类型,则这些函数就是重载函数。
重写
重写是指继承中具有父子关系的两个类,子类重写父类中的方法,但是要求,父类中的方法必须是抽象的或虚方法,子类才可以重写,其它无修饰的方法不可以重写,可以继承或覆盖。
override 修饰符表示派生类的方法或属性,这个派生类代替基类中具有相同的名称和签名的类。要被重写的基方法必须声明为 virtual、abstract 或 override:以这种方式重写非虚方法或静态方法是不可能的。
例如:
接口:
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. 接口一旦被继承,子类需要把接口中所有成员实例化(通过具体的可执行代码实现接口抽象成员的操作)。
例如:
还有一些反射,委托,事件,设计模式等等将在接下来的时间内学习&&复习。
刚巴蝶~
今天在这里复习一下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>
对象 :
对象就是类的实例。类与对象的关系就如类型和变量的关系,所有对类的操作都必须通过对象来实现。当一个类定义了多个对象时,每个对象拥有各自的成员数据。
类的三种成员类型:
1) 私有成员(private):缺省情况下,一个类中的所有成员都是私有的。私有成员只能被类本身的成员函数访问。能够被继承但是被继承的私有成员不能够使用。
2) 公有成员(public):公有成员可以被类成员函数和外部函数使用。
3) 保护成员(protected):类的保护成员能被类及其派生类的成员函数和友员函数使用,具有继承性。
构造函数与析构函数 :
1)构造函数
a. 是特殊的成员函数;在创建对象时首先由系统自动调用。它的作用是为新创建的对象分配空间,或为该对象的成员变量赋值等;
b. 构造函数名必须与其类名称完全相同,并且不允许有返回值。
2)析构函数
a. 析构函数是构造函数的逆操作;
b. 析构函数在类名之前加~来命名,它不允许有返回值,也不允许带参数,并且一个类只能有一个析构函数。
继承:
从一个基类中派生出的一个新的类,C#并不支持多重继承.
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.
还有一些反射,委托,事件,设计模式等等将在接下来的时间内学习&&复习。
刚巴蝶~
相关文章推荐
- ASP.NET(C#)学习基础
- C#学习笔记(二十一):使用文件基础
- c#基础:类与接口的学习
- C#基础学习日志===&amp;amp;amp;amp;gt;命名空间的使用&amp;amp;amp;amp;lt;===
- C#基础学习日志===>二维数组<===
- 学习C#,你的基础是什么?
- C#基础学习日志===&gt;数组&lt;===
- C#中的多态性-回归自然,学习C#基础知识
- C#基础学习 —— 异步编程篇 2
- C#基础学习日志===&amp;gt;Method&amp;lt;===
- C#学习笔记(二十一):使用文件基础
- c#基础:类与接口的学习二
- c#基础:类与接口的学习一
- C#基础学习 —— 异步编程篇
- C#学习基础概念二十五问第1/4页
- C#学习笔记之类型基础
- 基础学习 C#之一
- [导入] c#基础:类与接口的学习二
- C#基础学习日志===>二维数组<===
- C#基础学习——异步编程篇