C#面向对象编程

C#面向对象编程简介

对象的含义

对象就是OOP(面向对象编程)应用程序的一个构件,这个构建封装了部分应用程序,这部分程序可以是一个过程、一些数据或者一些更抽象的实体。

属性和字段

可以通过属性和字段访问对象中包含的数据。这些对象数据可以用于区分不同的对象,因为同一个类的不同对象在属性和字段中存储了不同的值。
包含在对象中的不同数据构成了对象的状态,在实例化一个类时必须提供给类有意义的状态,此时可以使用属性和字段。
在访问状态时最好提供属性而不是字段,因为这样可以更好的控制各种行为,这个选择不会影响使用对象实例的代码。
对属性的读写访问也可以由对象来明确定义。某些属性是只读的,只能查看他们的值,而不能改变他们。
除了对属性的读写访问外,还可以为字段和属性指定另一种访问权限,称为可访问性。可访问性确定了什么代码可以访问这些成员。他们可用于所有代码(公共),还是只能用于类中的代码(私有),。常见情况是把字段设置为私有,通过公共的属性访问他们。

对象的生命周期

每个对象都有一个明确定义的生命周期,除了正在使用的正常状态外,还有两个重要阶段。构造阶段和析构阶段

构造函数

所有类定义都至少包含一个构造函数,在这些构造函数中,可能有一个默认构造函数,该函数没有参数,与类名同名。类定义还可能包含几个带参数的构造函数,称为非默认的构造函数。代码可以使用他们以许多方式实例化对象。例如给存储在对象中的数据提供初始值。,在C#中使用new关键字调用构造函数。
构造函数和字段属性方法一样,可以是公共的或者私有的,在类外部的代码不能使用私有构造函数实例化对象,而必须使用公共构造函数,这样,通过把默认构造函数设置为私有的,就可以强制类的用户使用非默认构造函数。

静态成员和实力类成员

静态成员,例如静态方法、静态属性或静态字段。静态成员可以在类的实例之间共享,所以可以将他们看成类的全局对象,静态属性和静态字段可以访问独立于任何对象实例的数据,使用静态成员时甚至可以不需要实例化对象。例如使用Console.WriteLine()。在UML语言中静态成员带有下划线。

OOP技术

接口

接口是把公共实例方法和属性组合起来,以封装特定功能的一个集合。一旦定义了接口就可以在类中实现他们。这样类就可以支持接口所指定的所有属性和成员。接口的命名通常以大写字母I开头。一个类可以支持多个接口,同时多个类也可以支持相同的接口。

继承

C#中的对象仅能 直接派生自一个基类,在继承一个基类时,成员的可访问性就成了一个重要问题,派生类不能访问基类的私有成员,但可以访问其公有成员,派生类和外部代码都可以访问其公共成员,也就是说,这两种访问级别,不能让一个成员可由派生类和基类访问却不能由外部代码访问。为了解决这个问题,C#提供了第三种可访问性:protected。只有派生类才能访问protected成员,而外部代码无法访问。
基类的成员可以是虚拟的,其成员可以由继承他的类重写,派生类可以提供成员的另一种实现代码,这种代码不会删除原来的代码,仍可以在类中访问原来的代码,但外部代码不能访问他们。如果没有提供其他的实现方式,通过派生类使用成员的外部代码就自动访问基类中成员的实现代码。
基类还可以定义为抽象类,抽象类不能实例化,要使用抽象类必须继承这个类。被封装的类不能做基类。

多态性

可以把某个派生类型的基本变量赋给基本类型的变量,不需要通过强制类型转换就可以通过这个变量调用基类的方法。

Animal myAnimal = myCow;
myAnimal.Eatfood();

可以把基本类型转换为派生类型的变量,调用派生类的方法

Cow myNewCow = (Cow)myAnimal;
myNewCow.Moo();

如果原始变量不是Cow或派生于Cow的类型,这种强制转换就会引发一个异常。
接口的多态性,尽管不能像对象一样实例化接口,但是可以建立接口类型的变量,然后就可以在支持该接口的对象上非食用这个变量来访问接口提供的方法和属性。

对象之间的关系

分为包含关系和集合关系
用一个成员字段包含对象实例就可以实现包含关系。这个成员字段可以是公共字段,此时与继承关系一样,容器对象的用户可以访问他的方法和属性。,但不能像继承关系一样,通过派生类访问类的内部代码。
集合关系:集合基本上就是一个增加了功能的数组,通常以所存储的类的复数形式来命名集合。
数组和集合的主要区别是,集合通常实现额外的功能通过add()和remove()来添加和删除集合中的项。通常集合还有一个Item属性,根据对象的索引返回该对象。

运算符重载

事件

对象可以激活和使用事件,

引用类型和值类型

值类型在内存的同一处存储它们自己和它们的内容
引用类型存储指向内存中其他某个位置的引用,实际内容存储在这个位置
值类型和引用类型的一个主要区别是:值类型总是包含一个值,而引用类型可以是null,表示他们不包含值。可使用可空类型创建值类型,数组是隐式的引用类型,我们创建的每一个类都是引用类型。

本文还待补充。。。。。。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值