---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------
面向对象
面向对象不是取代面向过程的。
类,对象。“人类”是类,“张三”是“人”这个类的对象,类是抽象的,对象是具体的。按钮就是类,某个按钮就是对象。对象可以叫做类的实例(instance)。类就像int,对象就像10,字段filed(和类相关的变量),字段就是类的状态,人这个类有姓名,年龄,身高等字段。类不占内存,对象才占内存。
方法Method,方法就是类能够执行的动作,好比问好,吃饭等。
类的继承,类之间也有继承关系,比如“电脑”类可以从“电器”类继承,这样的好处是“电脑”类只需要定义自己特有的字段,方法就可以,也就是只要定义内存的大小,Cpu型号这些字段或者弹出光驱等方法就可以。父类(parent).基类(Base)。电脑类就是电器类的子类(childclass)。重用
例:
class Person //定义一个Person类
{
public string name;//Person类中包含了name,age,sex三个字段
public int age;
public char sex;
public void SayHello() //Person类还有一个Sayhello的方法
{
Console.WriteLine("大家好");
}
}
实例化对象并且赋值
语法: 类名 对象名 =new 类名 ();
对象名.字段名= ;
例:
person P1 = new person();
P1.age = 16;
P1.name = "张三";
P1.sex = '男';
注意:只要是没加static的方法和属性,都必须先实例化,再通过实例名.方法名或实例名.属性来访问。
加了static的方法或属性,可以直接通过 类名.方法名或类名.属性来访问。
面向对象的三个特性:封装,继承,多态。
成员的访问级别
字段,方法,属性都可以叫做类的成员,他们都需要定义访问级别,访问级别的用处在于控制成员哪些地方可以被访问,这样就达到面向对象中“封装”的目的。
几个访问级别:public(任何地方都可以访问),private(默认级别,只能有本类中的成员访问)。还有internal(只能在本项目中访问),protected(只能在本类和子类中被访问)。
注意:在一个类中定义变量或方法时,没有写访问修饰符,那么默认的访问修饰符为private。
静态方法和实例方法(定义和调用)
静态 | 实例(非静态) |
static关键字 | 不需要static关键字 |
使用类名调用 | 使用实例对象调用 |
在静态方法中,可以访问静态成员 | 在实例方法中:可以直接访问静态成员 |
在静态方法中,不可以直接访问实例成员 | 在实例方法中:可以直接访问实例成员 |
调用前初始化 | 实例化对象时初始化 |
属性
通俗的来说就是:定义一个public的具有get/set方法的变量,这个变量就是用于保护一个私有变量。
读写属性:
具有get/set方法的属性就是读写属性。
只有get方法的属性成为只读属性,这个属性只能读取,不能写入。
例:
class person
{
public string name;
public char sex;
int age;
//定义一个变量,在这个变量中含有set/get两个方法,叫属性。
public int Age
{
get
{
return age;
}
set
{
//这里的关键字value,就是存储用户赋的那个值。
if (value >= 0)
{
age = value;
}
else
{
age = 0;
}
}
}
}
构造方法(构造函数)
当我们实例化一个类时,系统会自动对这个类的属性进行初始化。
数字类型初始化成0/0.0
string类型初始化成:null
char类型初始化成:\0
构造方法的好处:
1)对多个属性进行赋值时,不需要重复的写实例名 。
2)可以保证用户在new一个对象的时候必须对某一个属性进行赋值
3)和第二类似,在创建对象时,对只读属性进行初始化。
注意:当我们定义好一个类之后,如果我们没有写构造方法,那么系统会自动给我们加上一个默认的没有参数的构造方法。构造方法是一个特殊的方法,他的名字和类的名字相同,并且没有返回值,连void都可以省略不写,我们一旦手写一个构造方法后,系统原先默认给我们添加的那个无参的构造方法就不会在为我们添加了。
一般声明构造方法时,需要添加public。
例:
public person(string name)
{
this.name = name;
}
构造方法的重载:(也就是说可以有多个参数不同的构造函数)
public person(string name,int age)
{
this.name = name;
this.age=age;
}
public person(string name,int age,char sex)
{
this.name = name;
this.age=age;
this.sex =sex;
}
析构函数(*)
不能再结构中定义析构函数,只能对类使用析构函数。
一个类只能有一个析构函数。
无法继承或重载析构函数。
无法调用析构函数,他们是被自动调用的。
析构函数既没有修饰符,也没有参数。
------------------------------------------------------------------------------------------分割线---------------------------------------------------------------------------------------
习题: 写一个ticket类,有一个距离属性(本属性只读,在析构方法中赋值),不能为负数,有一个价格属性,价格属性只读,并且根据距离计算价格(1元/公里):
0-100公里 票价不打折
101-200公里 总额打9.5折
201-300公里 总额打9折
301-400公里 总额打8折
有一个方法,可以显示这张票的信息。
---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------