《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


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值