我还是 Objective-C 的新手,我最近学会了如何创建属性,到目前为止一切都很好,但困扰我的一件事是,即使在创建了属性之后,setter 和 getter 方法仍然是公开可用的。
假设我有以下代码:
// myClass.h
@interface myClass : NSObject {
int _startPos;
}
@property (assign, readwrite, setter = setStartPos:, getter = getStartPos) int startPos;
-(void) setStartPos: (int) pos;
-(int) getStartPos;
@end
实现文件应该是不言自明的,我不想做任何具体的事情。
现在,我在某处读到,并在实践中尝试过,如果您在实现文件中创建一个类别,并向其中添加一些方法,则可以使这些方法对 myClass.m 文件之外的东西不可见(又名private )。
“好吧”我想,并决定尝试一下:
//myClass.m
#import <Foundation/Foundation.h>
#import "myClass.h"
@interface myClass (hidden)
-(void) setHiddenStartPos: (int) hPos;
-(int) getHiddenStartPos;
@end
@implementation myClass (hidden)
-(void) setHiddenStartPos: (int) hPos {
_startPos = hPos;
}
-(int) getHiddenStartPos {
return _startPos;
}
@end
@implementation myClass
-(void) setStartPos: (int) Pos {
[self setHiddenStartPos: Pos];
}
-(int) getStartPos {
return [self getHiddenStartPos]; //this is to see if I can get the value from the hidden methods through the non-hidden ones
}
@end
没关系,在main()中测试它我可以看到名称中带有“隐藏”的方法实际上是不可访问的,因此它们就像是私有的一样。
然后我尝试将其添加到头文件中:
@property (assign, readwrite, setter = setHiddenStartPos:, getter = getHiddenStartPos) int
看看我是否可以通过属性访问隐藏的方法,
但是当我这样做时,隐藏的方法在main()中变得可访问,并且使方法只能通过属性访问的整个计划付诸东流
所以我问你,有没有办法让除了属性和/或对象本身之外的任何东西都无法访问方法?
编辑:我意识到 getter 通常没有 get 的名字,所以请停止评论它?
还要强调我的意思:我想在 c# 中创建属性,其中 setter 和 getter 的内容对属性本身是私有的
public int exampleProperty
{
set{...}
get{...}
}
它不使用方法作为 getter 和 setter,因此 setter 和 getter 中的代码只能由属性访问,就像方法中的代码是方法本身的本地代码一样