博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Object C学习笔记14-分类(category)
阅读量:6926 次
发布时间:2019-06-27

本文共 1902 字,大约阅读时间需要 6 分钟。

  在.NET中有一个非常带劲的特性,那就是扩展方法. 扩展方法使你能够向现有类型“添加”方法(包括你自定义的类型和对象噢),而无需创建新的派生类型、重新编译或以其他方式修改原始类型。扩展方法是一种特殊的静态方法,但是可以像扩展类型上的实例方法一样进行调用。

  先看看.NET中扩展方法的定义和使用

public static class test    {        public static bool In(this object o, IEnumerable c)        {            foreach (object obj in c)                if (obj.Equals(o))                    return true;            return false;        }    }    string[] list = new string[] { "abc" , "123", "C#"};    Console.WriteLine("Object C".In(list));

  在.NET中Object 类并没有In方法的定义,但是的确用"Object C"方法调用了In方法。

 

  Object C中的分类(category) 又称类别在不修改原有的类的基础上增加新的方法,和.NET一样不能添加新的实例变量。

 

  新增一个Person的Object C对象,在Person.h文件中定义相应的书属性name和age,并且定义一个方法:

  -(void) addName:(NSString*) name1 andWithAge:(int) age1;

#import 
@interface Person : NSObject{ NSString *name; int age;}@property (retain) NSString *name;@property (nonatomic)int age;-(void) addName:(NSString*) name1 andWithAge:(int) age1;@end
Person.h

  Person 类的详细描述文件如下:

#import 
@interface Person : NSObject{ NSString *name; int age;}@property (retain) NSString *name;@property (nonatomic)int age;-(void) addName:(NSString*) name1 andWithAge:(int) age1;@end
Person.m

 

  怎么调用这里就不说了,如果现在要往类Person中添加一个新的方法 

  -(void) addCate:(NSString*) cate;

 

  新建一个PersonCategory 类,产生.h,.m两个文件。

#import 
#import "Person.h"@interface Person(cate)-(void) addCate:(NSString*) cate;@end

  在PersonCategory.h文件中修改为如上代码,将PersonCategory改为Person,并且后面括号为(cate)  ; () 中的名字可以随便取

#import "PersonCategory.h"@implementation Person(cate)-(void) addCate:(NSString *)cate{    NSLog(@"dafdasfdsa=%@",cate);}@end

  修改PersonCategory.m文件中的代码如上。通过以上代码就可以往Person类中添加新方法 addCate 。

  测试调用addCate方法如下:

Person *peron=[[Person alloc] init];        [peron addName:@"hechen" andWithAge:23];                [peron addCate:@"safdasfds"];

  通过以上代码可以看得出 Person 可以调用addCate方法了,当然调用addCate方法需要引入文件PersonCategory.h 文件。

转载地址:http://tkkjl.baihongyu.com/

你可能感兴趣的文章
Oracle 11g RAC oc4j/gsd Offline
查看>>
Ajax下载文件(页面无刷新)
查看>>
[译]Node.js - Event Loop
查看>>
Creating, Stopping, Re-Starting and Deleting a Timer in Oracle Forms
查看>>
laravel 使用 session
查看>>
数据库实例: STOREBOOK > 用户 > 编辑 用户: MGMT_VIEW
查看>>
AjaxPro因为汉字文件夹引发的IE兼容性问题
查看>>
GTK经常使用控件之行编辑( GtkEntry )
查看>>
Picking up Jewels
查看>>
Tween动画TranslateAnimation细节介绍
查看>>
PHP socket 服务器框架集
查看>>
【分词器及自定义】Elasticsearch中文分词器及自定义分词器
查看>>
Ubuntu查看系统版本的方法
查看>>
maven: 打包可运行的jar包(java application)及依赖项处理
查看>>
spark与flume整合
查看>>
数据挖掘工程师笔试及答案整理
查看>>
struts2获取ServletContext对象
查看>>
js实现菲波那切数列的两种常用方法
查看>>
【Shared Server Mode】测试调整shared_servers参数对数据库的影响
查看>>
TabLayoutViewPagerDemo【TabLayout+ViewPager可滑动】
查看>>