一、什么是面对对象:面对对象是一个具体的东西,比如水杯,当你拿到这个水杯的时候就可以说水杯是一个对象,水杯本身并不是对象,只是一个类型而已。
二、面向对象的三大特征:
A:封装性:就是打包
好处:易于代码的管理和代码的复用
B:继承性
构造方法:每个类中都有一个无参构造方法,当我们自己自定义了一个有参构造方法时,系统将不再提供无参构造方法初始化数据,需要我们自己在写无参构造方法
用法:使用 base()由于调用父类方法;子类构造方法调用父类构造方法需要先写个子类构造方法,后面跟 :base(),如果父类构造方法有参数,将需要自己在父类中再写一 个构造方法,因为使用base()系统会默认调用父类的构造方法
构造方法执行顺序:从object类开始一直从上往下调用:初始化数据
里氏转换原则:1:子类对象可以赋值给父类对象
2:父类对象可以强制转换为对应的子类对象(子类对象必须继承父类)
is 和 as :类型转换
is 用法 变量名 is 类型 //返回一个bool值
as用法 变量名 as 类型 //如果该变量可以转换为此类型,则直接可以赋值,否则赋值为空
C:多态性
原则:父类统一调用:子类具体实现
隐藏看类型,重写只管新
父类实现多态:使用 virtual 修饰符对方法进行修饰,变成虚方法,然后子类方法加 override 可以对他进行重写,也可以不重写父类方法
抽象类实现多态:在方法中加上abstract 注意:方法中加了abstract 后,类名前必须加 abstract 修饰符;
变成抽象方法后:方法就不用实现了:publec abstract void life();
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Threading.Tasks;
6
7 namespace _07_抽象类实现多态
8 {
9 abstract class A
10 {
11 public abstract void life();
12 }
13
14 class B : A
15 {
16 public override void life()
17 {
18 Console.WriteLine("重写抽象方法");
19 }
20 }
21
22 class Program
23 {
24 static void Main(string[] args)
25 {
26 B j = new B();
27 j.life();
28 }
29 }
30 }
接口实现多态:在把Class 改成 interface :接口中 方法写法:void life(); Shift +Alt + F10
如果一个类继承两个接口,且两个接口中都有同一个方法:使用显示接口 Shift +Alt + F10
调用的时候先把子类赋值给接口对象,然后在用接口对象进行调用
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _06_显示接口
{
interface IIntface
{
void a();
}
interface II
{
void a();
}
class B:IIntface,II
{
void IIntface.a()
{
Console.WriteLine("IInterface接口");
}
void II.a()
{
Console.WriteLine("II接口");
}
}
class Program
{
static void Main(string[] args)
{
IIntface t1 = new B();
t1.a();
II t2 = new B();
t2.a();
}
}
}
原文:http://www.cnblogs.com/dongqian/p/4849869.html