《C#妹妹和Objective-C阿姨对话录》(02)这就是类--阿姨的狗狗
C#妹妹:阿姨,今天这么早就出来遛狗了??
Objective-C阿姨:是啊,我的狗老了,有点失眠,起的是早点...你看看,这个狗狗特聪明特听话
//********* 文件Dog.h *************** #import <Foundation/Foundation.h> typedef enum { kBlackColor, kYellowColor, kWhiteColor } Color; @interface Dog : NSObject { Color Color; int Age; } -( void ) Sound; -( void ) Eat:( NSString *) food EatQty:( int ) count; @end //Dog |
-
// //********* 文件Dog.m *************** #import "Dog.h" @implementation Dog -( void ) Sound { NSLog (@ "汪汪!" ); } -( void ) Eat:( NSString *) food EatQty:( int ) count { NSLog (@ "吃%d斤%@" ,count,food); } @end //Dog |
C#妹妹:哇塞,双胞胎狗狗耶....

Objective-C阿姨:啥眼神儿啊。。。
,是一只狗狗分成两个文件而已。。你不知道C语言有头文件么?

C#妹妹:
。。。仔细看看还是看得懂得。有方法,有变量。。。还有这个Dog类继承自NSObject。

Objective-C阿姨:你说的没错, 。每个类由两部分组成,接口(@interface开头 @end结尾)和实现(@implementation
开头 @end结尾),同样叫接口(interface),但是跟你的接口意思完全不同,这里接口的意思是告诉编译器这个类提供那些数据成员(实例变量)和方法。我这里跟.NET的“接口(interface)”类似的概念是“协议(protocol)”,类似的事情还有很多,见到一样的关键字不要想当然就好了。。

C#妹妹:恩,我基本上明白了,但是这里还有点疑问。
-( void ) Eat:( NSString *) food EatQty:( int ) count { NSLog (@ "吃%d斤%@" ,count,food); } |
如果我写这段代码应该是这个样子,差别蛮大的
public void Eat(String food, int eatQty) { Console.WriteLine( "吃{1:0}斤{0}" , food, eatQty); } |
Objective-C阿姨:是的,最大的区别应该在方法的参数上。我的方法是很有特色的,方法的名称和参数是合在一起的,比如调用我的方法需要这样操作
Dog *d=[Dog new ]; [d Sound]; [d Eat:@ "骨头" EatQty:3]; |
如果是C#的话应该是这样调用的
Dog a = new Dog(); a.Sound(); a.Eat( "骨头" , 5); |
看到区别了么?如果参数很多的话,通过我的代码可以很容易分辨每个参数的意思
C#妹妹:恩,果然很方便(心里想:真啰嗦,还是智能感知方便啊。。。),另外怎么每个语句都用中括号扩起来啊?
Objective-C阿姨:是的,在我这里通知对象执行某种方法称为“发送消息”,[d Sound]表示向d对象发送Sound消息,其实就是调用实例方法了。你知道我的代码文件扩展名为啥是m么?因为是message的缩写。
C#妹妹:方法前面的“-”表示什么意思?可以有“+”号么?
Objective-C阿姨:“+”和“-”都有的,“-”表示实例方法,“+”表示类的方法,也就是你的静态方法。
C#妹妹:你没有访问修饰符么?
Objective-C阿姨:我可以用成@public、@protected、@private 作为访问修饰符,修饰实例变量(成员变量),默认是@protected。但也只有成员变量有访问修饰符,类变量、类方法、成员方法是没有访问修饰符的,所有的方法都是公有的, 所有的类变量都是私有的。
C#妹妹:这就明白了,真是Objective-C虽老,五脏俱全啊!!!
Objective-C阿姨:

C#妹妹:来狗狗,吃点东西。。。。。


[d Sound]; [d Eat:@ "骨头" EatQty:1]; |
狗狗:



C#妹妹:
,再喂点肉肉。。。。。

[d Sound]; [d Eat:@ "肉" EatQty:2]; |
狗狗:


C#妹妹:
,嘿嘿,都说狗改不了吃屎,来点猛的吧。。。。。。。。


[d Eat:@ "大便!!!!!!" EatQty:999]; |
狗狗:

。。。。。。。。。。。






C#妹妹:Objective-C阿姨,你的狗狗果然很乖呀。。。88

-
各位同学,本人学习Objective-C时间很短,学习Objective-C其实不是为了Mac、iPhone开发,并没有实用,
其实是一个C#用户学习Objective-C的学习笔记,学习的确切目的是帮助我理解C#,毕竟没有比较是不可能知道所谓C#的特点的
请大家批判的眼光看这个东西,如果发现和其他文章、书籍、评论、资料有冲突,请尽量以其他文章为准。并给我留言
也邀请所有高手积极拍砖,我正好用来盖房子~~~
《C#妹妹和Objective-C阿姨对话录》
(01)认识Objective-C--初次见面的问候
(02)这就是类--阿姨的狗狗
(03)NSString--再遇狗狗
(04)垃圾回收基础--拆迁队那点事
待续⋯⋯
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
2006-04-13 .Net WEB打印需要设置的内容和方法