加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在swift中思考C#protected accessor的正确方法是什么?

发布时间:2020-12-14 02:23:48 所属栏目:百科 来源:网络整理
导读:在c#中,我们有受保护的访问器,它允许类成员在继承的clases上可见,但对其余的则不可见. 在Swift中这不存在所以我想知道对于这样的事情是什么是正确的方法: I want to have a variable (internal behavior) and and a public method using this variable on a
在c#中,我们有受保护的访问器,它允许类成员在继承的clases上可见,但对其余的则不可见.

在Swift中这不存在所以我想知道对于这样的事情是什么是正确的方法:

I want to have a variable (internal behavior) and and a public method using this variable on a base class. This variable will be used also on inherited clases.

我看到的选项

>忘记基类,并在我需要的任何地方实现变量和方法.错误,重复的代码
>按组合实现继承.我将创建一个包含常用方法的类,这将由组合而不是继承使用.错误但仍然重复可以通过继承避免的代码
>实现继承并在基类上创建变量internal.错误,因为暴露事情没有任何理由,除了允许继承的clases的可见性.

基类的实现细节

我想要一个NSOperationQueue实例和一个公共方法来取消排队操作.我从继承的类向此队列添加新操作.

在Swift中,正确的答案几乎总是协议和扩展.它几乎从不继承.有时Cocoa会阻碍我们,因为Cocoa中的类比协议更常见,但目标几乎总是协议和扩展.子类化是我们的最后选择.

您的特定情况令人困惑,因为NSOperationQueue已经有一个公共方法来取消排队操作(cancelAllOperations).如果要保护队列免受外部访问(例如,阻止调用者直接使用addOperation),则应将队列放在另一种类型(即组合)中,并将所需内容转发到队列.关于您正在解决的具体问题的更多细节将允许我们帮助建议其他类似Swift的解决方案.

如果最终你需要一些看似受保护或朋友的东西,那么正确的解决方案就是私有的.将您的子类或您的朋友放在与目标相同的文件中,并将私有内容标记为私有.或者,将需要协同工作的东西放在框架中,并将属性标记为内部. Swift Blog提供了一个很好的解释,为什么这是一个有意的选择.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读