我理解了PROPERTIES超过FIELDS的优点,但是我觉得使用AUTO实现的属性而不是MANUAL实现的属性并没有提供任何优势,只是让代码更加简洁一些。 我感觉更舒适的使用: private string _postalCode; public string PostalCode { get { return _postalCode; } set { _postalCode = value; } } 代替: public string PostalCode { get; set; } 主要是因为如果我想要做任何自定义的get和set的实现,我必须创build自己的属性,无论如何由私人领域支持。 那么,为什么不从一开始就咬住子弹,为了一致性而立即给予所有属性这种灵活性? 考虑到您在Visual Studio中所要做的只是点击您的私有字段名称,然后按Ctrl + E,就完成了。 如果我手动执行,那么最终会出现一些不一致性,其中有一些由专用字段支持的手动创build的公共属性,以及一些自动实现的属性。 我感觉好多了,无论是全自动还是全手动。 这只是我吗? 我错过了什么吗? 我误解了什么吗? 我是否过分强调一致性? 我总是可以find有关C#特性的合法讨论,几乎总是有利有弊,但在这种情况下,我确实找不到任何人推荐使用自动实现的属性。
如果您的公共界面中有一个属性,如下所示 @interface MyClass : NSObject @property(strong) NSString *myProp; @end 然后综合它,实际上综合variables: @implementation MyClass @synthesize myProp = _myProp; // or just leave it at the default name.. @end 什么是实例variables_myProp的可见性? 也就是说,这是考虑@public , @protected或@public @protected ? 我猜,因为MySubClass可以从MyClassinheritance,那么它也将获得属性(自然),但它也会inheritance实例variables的可见性? 如果我把这个属性放在一个类扩展中,它有什么不同? 这会隐藏子类的属性,我也猜测实例variables。 这是logging在任何地方?
对于课堂devise中的一些事实,特别是function是否应该是成员,我考虑了一下Effective c ++,find了第23项,即非成员非好友函数。 用Web浏览器的例子第一手的阅读是有道理的,然而在这个例子中,便利的function(在这本书中命名为非成员函数)改变了这个类的状态,不是吗? 所以,第一个问题,他们不应该是成员吗? 进一步阅读,他认为STL函数,实际上一些类没有实现的函数都是在stl中实现的。 按照本书的思想,它们演变成一些便利的function,它们被压缩到一些合理的命名空间中,比如std::sort , std::copy from algorithm 。 例如, vector类没有sort函数,而使用stl sort函数,所以不是vector类的成员。 但是也可以将相同的推理延伸到vector类中的其他一些函数,比如assign这样也可以不作为成员实现,而是作为一个便利函数。 但是,这也会改变对象的内部状态,就像它所操作的那样。 那么这个微妙但重要的(我猜)问题背后的理由是什么? 如果你有机会获得这本书,你能否为我澄清这些问题?
假设我有一个将只读视图返回给成员列表的方法: class Team { private List<Player> players = new ArrayList<>(); // … public List<Player> getPlayers() { return Collections.unmodifiableList(players); } } 进一步假设所有客户端都立即迭代列表一次。 也许把玩家放入JList或其他东西。 客户端不存储对列表的引用以供以后检查! 鉴于这种常见的情况,我应该返回一个stream吗? public Stream<Player> getPlayers() { return players.stream(); } 或者在Java中返回一个非惯用的stream? stream被devise为始终被“终止”在他们创build的相同expression式内?
我有一个项目,我们经常使用Integer.parseInt()将一个string转换为一个int。 当出现错误(例如, String不是数字,而是字母a ,或其他)时,此方法将引发exception。 但是,如果我必须在任何地方处理我的代码中的exception,这很快就会变得非常难看。 我想把这个方法,但是,我不知道如何返回一个干净的值,以显示转换出错。 在C ++中,我可以创build一个接受int指针的方法,并让方法本身返回true或false。 不过,据我所知,这在Java中是不可能的。 我也可以创build一个包含true / falsevariables和转换后的值的对象,但这看起来并不理想。 同样的事情为全球价值,这可能会给我multithreading的麻烦。 那么有没有一个干净的方法来做到这一点?
放弃 是的,我完全知道我所问的是完全愚蠢的,任何想要在生产代码中尝试这样的东西的人都应该被解雇和/或开枪。 我主要看看是否可以做到。 现在,这是没有办法,有没有办法从课堂以外的C ++访问私人类成员? 例如,有没有办法做到这一点与指针偏移量? (天真和否则生产准备技术欢迎) 更新 正如在评论中指出的那样,我问这个问题是因为我想写一个关于封装(以及它如何影响TDD)的博客文章。 我想看看是否有办法说“使用私有variables不是100%可靠的方法来强制封装,即使在C ++中”。 最后,我决定把更多的精力放在如何解决问题上,而不是为什么这是一个问题,所以我没有像我计划的那样突出显示一些东西,但是我仍然留下了一个链接。 无论如何,如果有人对它是如何感兴趣的话,这里是: testing驱动开发的敌人第一部分:封装 (我build议在你决定疯了之前阅读它)。
封装和抽象的精确区别是什么?
C ++中public , private和protectedinheritance之间的区别是什么? 我在SO上发现的所有问题都是针对具体案例的。