(1)抽象与封装
每一个个体称为对象
对象的属性,描述对象的特征
对象的方法,体现对象的行为
抽取出本质的、共性的东西,而忽略一些非本质的、
次要的内容,这就是抽象
由这些个体抽象出来的就是类,它代表一类事物
类与对象之间的关系就是抽象与具体的关系,对象是类的实例
封装就是把数据表现形式和对数据的操作细节隐藏起来,用户通过接口对数据进行操作,而不必知道数据表达、数据操作的细节
行为和属性封装在类的内部,用户只能通过接口操作类内部的数据
(2)类
(2.1)定义类
类修饰符 class 类名
{
类体
}
其中类修饰符是不必须的,类体用于定义类的成员,包括数据成员、成员函数
class Complex
{
//数据成员
private double real;
private double img;
//成员函数
public Complex(double r,double i)
{
real=r;
img=i;
}
public double Abs()
{
double val=real*real+img*img;
return Math.Sqrt(val);
}
}
(2.2)类的成员
(3)对象
因为对象是类的实例化,所以必须先由类创建对象,即类的实例化,然后再使用
(3.1)创建对象
类名 对象名=new 类名(参数)
Goods cloth=new Goods(10);
也可以分为两个部分
Goods cloth;
cloth=new Goods(10);
在创建对象时,必须使用构造函数。构造函数是一类特殊的成员函数,主要用于为对象分配空间,完成初始化工作。
格式如下:
访问修饰符 类名(形参列表)
{
函数体
}
public Goods(int s)
{
SNO =s;
count++;
}
构造函数
①须与类名相同
②可带参数,为类的数据成员赋初值
③无返回值,不能有return语句
④在创建对象时自动调用,不需要再程序中显示调用
⑤若不定义构造函数,编译系统会自动生成默认的构造函数
⑥可被重载,不可被继承
析构函数也是特殊的成员函数
格式为:
~类名()
{
函数体
}
~Person()
{
}
析构函数
①名字与类名相同,前面加~
②不能带参数
③无返回值
④撤销对象时,自动调用
⑤
⑥不能被继承,也不能被重载
(3.3)使用对象
先创建后使用,先用new运算符创建对象,然后使用“.”运算符访问对象中的成员,访问形式:
对象名.数据成员
对象名.成员函数
Course computer=new Counse(123,"面向对象程序设计",4);
string result=computer.Display();
(4)字段与属性
(4.1)字段
字段就是定义变量时声明的变量。字段包括
实例字段(没用static修饰符声明的字段,每个类实例都包含一份单独的字段拷贝)、
静态字段(被static修饰符声明的字段,所有的类实例,共享一个静态字段)、
只读字段(用readonly修饰符声明的字段,是特殊的实例字段,只能在字段声明或构造函数中被赋值,其他地方不能改变)
class Book
{
public readonly long Isbn;//只读字段
private string BookName;//实例字段
private static int Count;//静态字段
}
- 我的理解:字段就是类体里的数据成员中的变量
实例字段生命周期为类实例生成到类实例撤销
静态字段生命周期为类的载入到类的撤销
(4.2)
属性用来刻画对象的特征或表示对象的状态,它提供对类或对象的访问。
如:这个人生身高大约1米7,中等身材,圆脸
属性与字段的不同在于,属性不允许直接操作类的数据,而字段允许。
只能通过访问器来操作类的数据,她把读取和修改对象特性的操作与程序代码
关联起来。
访问修饰符 数据类型 属性名
{
get {get访问器代码块}
set{set访问器代码块}
}
public long Isbn
{
get {return isbn;}//只读属性(等于public long Isbn{get;private set;})
}
public string bookName
{
get {return BookName;}//读写属性 (等于public string BookName{get;set;})
set {bookName=value;}
}
public decinal Price
{
get{return Price;}
set{
if(value>0)
price=value;
}
}