一、基础定义(必须记住)
面向过程:以事件为中心,关注的是完成这件事的具体步骤
面向对象:以事物为中心,关注的是完成这件事所参与的对象的部分功能
面对对象的两大核心: 类 和 对象
类:具有相同特征和行为的一类事物的抽象,相当于数据类型,可以用来定义变量
对象:类的实例,类的具体体现,占用内存空间
区分类和对象:如果所有人想到的都是同一件事物,那就是对象,否则就是类
面对对象的三大特性: 封装 继承 多态
OO:面对对象
OOP:面对对象编程
二、类
1.类的定义:具有相同特征和行为的一类事物,相当于数据类型,可以用来定义变量
2.定义格式:
class 类名
{
// 特征(字段)
// 行为(方法)
}
3.字段
字段的添加格式: 访问修饰符 数据类型 字段名 ;
字段默认是私有的,如果想在外界访问到,就必须添加public
注意:字段在添加的过程中,可以赋初值
4.方法
4.1 方法的概念:方法是具有特定功能的代码段
4.2 方法的作用:将复杂的逻辑进行拆分,减少重复的代码
4.3 方法的格式: 访问修饰符 返回值 方法名 (参数列表){ 方法体; }
4.4 访问修饰符:控制方法的可见度, public private protected internal
4.5 返回值类型:返回值就是方法执行结束的结果,使用 returen 关键字,将方法执行的结果返回给主调人
如果方法没有返回值,则returen 可以省略
return 后面的值的类型要与方法的返回值类型匹配
return 语句执行后,程序会跳转回主调方法,所以return 下面的语句不会被执行到
4.6 方法名:方法的唯一标识,见名知意,首字母需要大写,命名要用驼峰命名法
4.7 参数列表:实现功能需要主调人提供的资源
4.8 参数:数据类型 变量名
4.8 方法体:具体功能的实现过程
4.10 方法的类型:有参数有返回值,有参数无返回值,无参数有返回值,无参数无返回值
4.11 方法的分类:系统方法 和 自定义方法
4.12 例子:
class Person // 设定一个 人 的类
{
// 特征(字段)
public string name ;
public string gender;
public string age;
// 行为(方法)
public void HeiHei(){
Console.WriteLine(“你追到,如果你追到我,我就让你嘿嘿嘿");
}
// 嘿嘿嘿
public void Eat( food ){
Console.WriteLine(“” + food)
}
// 吃饭
public int Run( ){
Random ran = new Random ();
int a = ran,Next(1,10);
return a; // 将变量a中存储的值返回给主调人
或者写成
return ran.Next(10);
}
}
三、对象
1.对象的创建格式:
类名 对象名 = new 构造方法;
例如:Person per = new Person ( ) ;
2.字段的访问 —— 使用 “点语法”
3.方法的调用
调用方法使用——点语法
如果方法不需要参数,方法名后的小括号不能省略
四、形参、实参、作用域
形参:形式参数,是在方法定义时创建的参数,是不确定的值
实参:实际参数,是在方法调用时的参考,是唯一确定的值
实参向形参进行值的传递,是一个拷贝的过程
作用域:指的是变量的有效范围
五、方法的嵌套调用、数组作为方法的参数方法允许嵌套调用,但是不允许嵌套定义
class Compute
{
// 求两个整数的和
public int Sum(int a, int b){
return a + b;
}
}
Compute cc = new Compute ();
int sum = cc. Sum (3,5 );
Console. WriteLine ( “两个整数之和为:” + sum ) ;
int num1 = 4, int num2 = 5;
Console. WriteLine ( cc.Sum ( num1, num2 ) ) ;
Console. WriteLine ( “num1 =” + num1 )
class Max01
{
// 求两个整数的最大值
public int MaxOf02 ( int a, int b ){
// 方法一
if ( a > b ) {
return a ;
} else {
return b ;
}
// 方法二
if (a > b){
return a ;
} return b;
// 方法三
return a > b ? a : b ; ( 如果a大于b,则输出a,反之输出b )
// 求三个整数的最大值
public int MaxOf03 ( int a ,int b,int c){
// 普通方法
if ( a > b && a > c ){
return a;
} else if ( b > a && b > c ){
return b;
} else {
return c;
}
// 嵌套方法
return MaxOf02 ( MaxOf02 ( a,b ),c );
}
// 求四个数的最大值
public int MaxOf04(int a, int b, int c, int d){
return MaxOf02(MaxOf02(MaxOf02(a,b),c),d);
}
// 求五个数的最大值 - - 排序
// 数据作为方法的参数时,由实参向形参传递的是数组的地址,所以在方法内部和外部操作的是同一个容器中的内容
public void MaxOf05 ( int[ ] arr ){
for ( int i =0; i < arr.Length - 1; i ++ ){
for ( int j = 0; i < arr.Length - 1 - i ; i++ ) {
if ( arr[ j ] > arr[ j + 1 ] ){
int temp = arr[ j ] ;
arr [ j ] = arr [ j + 1 ];
arr [ j + 1 ] = temp;
}
}
}
}
}
// 两个整数的最大值
Max01 aa = new Max01( );
int sum1 = aa. MaxOf02( 6,5 );
Console. WriteLine ( “最大的是” + sum1 ) ;
// 三个整数的最大值
int sum2 = aa. MaxOf03 ( 5, 6, 1 );
Console. WriteLine ( “最大的是” + sum2 ) ;
// 四个整数的最大值
int sum3 = aa. MaxOf04 ( 11, 22, 14, 20 );
Console.WriteLine ( “最大的是” + sum3 );
// 求五个或五个以上整数的最大值
int[ ] arr = { 12,14,2, 5, 22 };
aa.MaxOf05 ( arr );
for ( int i = 0; i < arr. Length ; i ++ ){
Console.Write ( arr[ i ] + “ “ ) ;
}
Console. WriteLine ( “最大值为:” + arr [ arr.Length - 1 ] ) ;
六、Get,Set 方法
字段设置为public 会违反封装特性, private 会违反继承特性
所以我们通常将字段的可见度设为 protected
当我们需要为字段赋值或者取值时,就需要为外界提供赋值或者取值的接口(方法)
// 添加 Set和Get 方法
// Set方法的规范:不需要返回值,参数的类型与字段相同,方法名Set + 字段名
protected double height;
public void SetHeight(double _height){
height = _height;
}
// Get方法的规范:返回值类型和字段类型一直,无参数,方法名Get + 字段名
public double GetHeight(){
return height;
}
public void SayHi(){
Console.WriteLine ("我叫{0},性别{1},年龄{2},身高{3}",name,gender,age,height);
}
// 输出Get.
Person p1 = new Person ();
Console.WriteLine (p1.GetHeight());