什么是C#中公共get / protected set属性的Objective-C等价物

时间:2009-08-27 01:36:47

标签: c# objective-c properties

有没有办法在Objective-C中创建像C#属性这样的属性?

public int prop { get; protected set;}

基本上,我希望能够从类外部获取值,但只能在类中设置值。

3 个答案:

答案 0 :(得分:24)

实现此目的的最简单方法是在readonly的公共接口(即.h文件)中将属性声明为MyClass

@property (readonly) NSInteger prop;

然后,在该类的.m文件中,声明一个类extension(一个具有空名称的类别)。在类扩展中,您可以redeclare @property将其可写性更改为readwrite:

@interface MyClass ()
@property (readwrite) NSInteger prop;
@end

@implementation MyClass
@synthesize prop;
...
@end

当然,Objective-C不会强制实施访问限制,因此没有什么可以阻止某些恶意代码调用-[MyClass setProp:]。编译器会将此标记为警告,但这与Objective-C中的结果一样好。不幸的是,没有标准的方法将这个“受保护的”可写属性记录到子类;你必须为你的团队制定一个约定,或者如果它在你将要发布的框架中,就把它放在该类的公共文档中。

答案 1 :(得分:1)

我相信您正在寻找@property

上的readonly属性
@property (readonly) NSInteger prop;

了解更多here

答案 2 :(得分:1)

没有办法在ObjC中创建@ private / @ protected方法,这些编译器直接仅适用于实例变量。但是,您可以在同一文件中声明静态C函数以获取“@private”方法。

keno的回答似乎是实现这一目标的最正确方法。