首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#保护访问器的正确思维方式是什么?

C#保护访问器的正确思维方式是什么?
EN

Stack Overflow用户
提问于 2015-10-29 13:18:53
回答 1查看 97关注 0票数 5

在c#中,我们有一个protected访问器,它允许类成员在继承的clases上可见,但对于其余的类成员是不可见的。

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

我希望有一个变量(内部行为)和一个在基类上使用这个变量的公共方法。此变量也将用于继承的clases。

选项我看到

  • 忘记基类,在我需要的地方实现变量和方法。错误,重复代码
  • 通过组合实现继承。我会创建一个包含常见方法的类,这将用于组合而不是继承。减少了错误的,但仍然重复了可以通过继承避免的代码
  • 在基类上实现继承并在内部设置变量。错误的,因为除了允许继承的类上的可见性之外,没有任何正当的理由来公开事情。

基类的实现细节

我希望有一个NSOperationQueue实例和一个公共方法来取消排队操作。我从继承的类中向这个队列添加新的操作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-29 15:04:52

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

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

如果最终需要类似于protectedfriend的东西,正确的解决方案是private。将您的子类或您的朋友与目标放在同一个文件中,并标记为private。或者,将需要在框架中工作的东西放在一起,并标记属性internalSwift博客很好地解释了为什么这是一个有意的选择。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33415366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档