面向对象的三大特性:封装、继承和多态。其中,成员变量的封装非常常用。OC在这点上和C#本质上是一样的,都是用方法对字段进行封装。成员变量封装成属性的优点显而易见,都是不允许外界直接访问成员变量,而只能通过方法来进行访问。如果该成员变量不想被外界调用,只要不提供对外的接口就可以了。通过封装,可以限制外界对成员变量的读和写操作,以及对写set方法中的参数值进行过滤。下面是成员变量的封装规范:
一、成员变量
1.1 成员变量名一般以下划线开头
1.2 成员变量尽量不要用@public
二、get方法
1、作用:返回对象内部的成员变量
2、命名规范
2.1 肯定有返回值,返回值类型肯定与成员变量类型一致
2.2 方法名跟成员变量名一样
2.3 不需要接收任何参数
三、set方法
1、作用:提供一个方法给外界设置成员变量值,可以在方法里面对参数进行相应过滤
2、命名规范:
2.1 方法名必须以set开头
2.2 set后面跟上成员变量的名称,成员变量的首字母必须大写
2.3 返回值一定是void
2.4 一定要接收一个参数,而且参数类型跟成员变量类型一致
2.5 形参的名称不能跟成员变量名一样
#import <Foundation/Foundation.h>
@interface Student:NSObject
{
//成员变量名以下划线开头
//只读:只允许外界访问我的no,不允许外界修改我的no
int _no;
int _age;
}
- (int)no;//获得学号
/*
get方法:
1、作用:返回对象内部的成员变量
2、命名规范
2.1 肯定有返回值,返回值类型肯定与成员变量类型一致
2.2 方法名跟成员变量名一样
2.3 不需要接收任何参数
*/
- (int)age;//获得年龄
/*
set方法
1、作用:提供一个方法给外界设置成员变量值,可以在方法里面对参数进行相应过滤
2、命名规范:
2.1 方法名必须以set开头
2.2 set后面跟上成员变量的名称,成员变量的首字母必须大写
2.3 返回值一定是void
2.4 一定要接收一个参数,而且参数类型跟成员变量类型一致
2.5 形参的名称不能跟成员变量名一样
*/
- (void)setAge:(int)age;//设置年龄
- (void)study;//学习方法
@end
@implementation Student
- (int)no{
return _no;
}
- (int)age{
return _age;
}
- (void)setAge:(int)age{
//如果传递进来的参数小于或等于0,设置为1
if(age<=0){
age=1;
}
_age=age;
}
- (void)study
{
NSLog(@"%d岁的学生在学习",_age);
}
@end
int main()
{
Student *stu=[Student new];
//设置学生的年龄属性
[stu setAge:20];
NSLog(@"学生的年龄是%d岁",[stu age]);
[stu study];
return 0;
}