121得票2回答
私有关键字和私有字段在TypeScript中有什么区别?

在TypeScript 3.8+中,使用private关键字标记成员为私有的与不使用它有什么区别:class PrivateKeywordClass { private value = 1; } 并使用JavaScript提议的#私有字段: class PrivateFieldCla...

113得票5回答
IEnumerable、IReadonlyCollection和ReadonlyCollection在公开列表成员方面有何不同?

我花了不少时间思考如何暴露列表成员的问题。在类似于我的问题中,Jon Skeet 给出了一个很好的答案。请随意查看。 ReadOnlyCollection 或 IEnumerable 用于暴露成员集合? 我通常很谨慎地暴露列表,特别是在开发 API 时。 我一直使用 IEnumerable 来...

111得票27回答
封装 Integer.parseInt() 的好方法

我有一个项目经常使用Integer.parseInt()将字符串转换为整数。 当出现问题时(例如,String不是数字而是字母a等),这个方法将抛出异常。 然而,如果我必须在我的代码中处理异常,这很快就会变得非常丑陋。 我想把它放在一个方法中,但是我不知道如何返回一个干净的值来显示转换出错了。...

102得票2回答
C#: List<T>和Collection<T>之间的区别(CA1002,不要暴露泛型列表)

尝试在这个项目上运行代码分析时,出现了一些警告,类似于以下内容: CA1002:Microsoft.Design:将“List&lt;SomeType&gt;”更改为使用Collection、ReadOnlyCollection或KeyedCollection中的“SomeClass.Som...

82得票16回答
理解封装和抽象的简单方法

学习面向对象编程概念,特别是对深入理解抽象和封装感兴趣。 已经查看了以下内容: 抽象 VS 信息隐藏 VS 封装 抽象和封装的区别? 我发现很难在没有真实且简单的示例类/代码片段的情况下理解这些概念。 我的一位同事说,抽象就是创建抽象类和以作用域保护其成员变量的普通类就被称为封...

81得票15回答
抽象和封装有何不同?

我正在准备面试,决定复习我的面向对象编程(OOP)概念。有数百篇文章可用,但似乎每篇文章都以不同的方式描述它们。 某些文章 表示: 抽象是“识别具有系统变化的共同模式的过程;抽象表示公共模式并提供指定要使用哪种变体的方法”(Richard Gabriel)。 并通过抽象类实现。 其他...

79得票27回答
我能否在不使用友元的情况下从类外访问私有成员?

免责声明 是的,我完全意识到我所询问的内容是非常愚蠢的,任何想在生产代码中尝试这样做的人都应该被解雇和/或开除。 我主要是想看看是否能够实现。 既然这件事已经解决了,有没有办法从类外部访问C++中的私有类成员呢?例如,是否可以使用指针偏移量来完成此操作? (欢迎使用天真和其他非生产准备技术) ...

76得票9回答
在Python中,我应该使用“public”属性还是“public”属性?

在Python中,我有以下示例类: class Foo: self._attr = 0 @property def attr(self): return self._attr @attr.setter def attr(self, ...

73得票7回答
把单元测试作为被测试类的友元有什么问题?

在C++中,我经常将一个单元测试类设置为被测试类的友元。我这样做是因为有时我需要编写一个私有方法的单元测试,或者我想要访问一些私有成员以便更轻松地设置对象的状态,从而进行测试。对我来说,这有助于保留封装和抽象,因为我不会修改类的公共或受保护接口。 如果我购买第三方库,我不希望其公共接口因为供...

72得票2回答
为什么PHP不允许私有常量?

我有一个类在内部实现中需要使用常量,但我希望限制这些常量的可见性。为什么PHP不允许私有常量?是否有其他方法可以实现这一点,或者PHP试图阻止我无知地进行某种设计错误?