encapsulation相关内容

为什么 PHP 不允许私有 const?

我有一个类受益于在其内部实现中使用常量,但我想限制这些常量的可见性.为什么 PHP 不允许私有常量?是否有其他方法可以实现这一点,或者 PHP 是否试图阻止我不知道的某种设计失误? 解决方案 使用 private static 属性. 在这种情况下,您将在所有对象中拥有相同的变量,如果您想将其范围扩展到嵌套,您可以公开一个 getter 方法来获取其值并限制变量设置. ..
发布时间:2022-01-23 23:31:29 PHP

我应该返回集合还是流?

假设我有一个方法可以将只读视图返回到成员列表中: class Team {私人名单玩家 = 新的 ArrayList();//...公共列表获取玩家(){返回 Collections.unmodifiableList(players);}} 进一步假设客户端所做的所有事情都是立即对列表进行一次迭代.也许将玩家放入 JList 或其他东西中.客户端确实不存储对列表的引用以供以 ..
发布时间:2022-01-22 09:52:24 Java开发

速记访问器和突变器

我正在学习 C#,并且正在学习如何将字段设为类私有,并使用 Getter 和 Setter 来公开方法而不是字段值. 是get;set; 在 Method 1 和 Method 2 等效?例如一个是另一个的简写吗? 班级学生{//实例字段私有字符串名称;私人国际商标;//方法一公共字符串名称 { 获取;放;}//方法二公共 int 标记{得到{返回标记;}设置{标记=值;}}} 最后,当 ..
发布时间:2022-01-17 18:41:06 C#/.NET

从 [包] 导入 [功能] 在 R

在 Python 或 R 中处理数据时,我们经常会加载多个包.在某些情况下,两个包(例如 foo 和 bar)可能每个都包含一些功能(例如 do_stuff). 在 Python 中防止歧义或意外的管理方式如下: from foo import do_stufffrom bar import other_function #(不从 bar 加载/导入 do_stuff()) 在 R 中, ..
发布时间:2022-01-14 23:39:27 其他开发

包装和可见性

我正在制作一个 SDK,我正在尝试将类分离到不同的包中,这些类使用其他一些共享类.问题是如果我公开共享课程,每个人都可以看到它们,而不仅仅是我的课程.使它们只能由我的应用程序访问的正确方法是什么? 例子: 包装一个我的班级1 包 b我的班级2 包c公共MySharedClass 因为 c 是公共的 MySharedClass 将能够访问它,但问题是它也将对世界可见,我 ..

Java:子包可见性?

我的项目中有两个包:odp.proj 和 odp.proj.test.我希望某些方法只对这两个包中的类可见.我该怎么做? 编辑:如果 Java 中没有子包的概念,有没有办法解决这个问题?我有某些方法,我希望只对测试人员和该包的其他成员可用.我应该把所有东西都扔到同一个包裹里吗?使用广泛反射? 解决方案 你不能.在 Java 中没有子包的概念,所以 odp.proj 和 odp.pro ..
发布时间:2022-01-13 16:35:21 Java开发

如何在不暴露使用的容器的情况下暴露迭代器?

我使用 C# 已经有一段时间了,回到 C++ 是一件很头疼的事情.我正在尝试将我的一些实践从 C# 带到 C++,但我发现了一些阻力,我很乐意接受你的帮助. 我想为这样的类公开一个迭代器: 模板我的容器类{上市://这里是问题://MyIterator 的 typedef 没有公开暴露 std::vector?MyIterator Begin() { return mHi ..
发布时间:2022-01-10 15:10:45 C/C++开发

Android - 如何在我的项目中添加@hide 注释

我正在开发 SDK,我想将 @hide 注释用于我不希望使用我的 SDK 的用户看到的方法/类.(与 活动实施 - 第 3898 行) 我尝试添加 @hide 注释,但我发现没有任何反应.为了使用 @hide 注释/或任何其他类似的解决方案来封装我的内部 SDK 的类/方法,我需要做什么. 解决方案 在Android SDK中,@hide注解只在构建android.jar.在编译时从 ..
发布时间:2022-01-08 16:09:24 Java开发

封装 Integer.parseInt() 的好方法

我有一个项目,我们经常使用 Integer.parseInt() 将 String 转换为 int.当出现问题时(例如,String 不是数字而是字母a 或其他),此方法将抛出异常.但是,如果我必须在任何地方处理我的代码中的异常,这很快就会变得非常难看.我想把它放在一个方法中,但是,我不知道如何返回一个干净的值以表明转换出错了. 在 C++ 中,我可以创建一个接受指向 int 的指针并让方法 ..
发布时间:2022-01-08 11:40:02 Java开发

封装 C# 新手

C# 新手,我明白封装只是“保护数据"的一种方式.但我还是不清楚.我认为 get 和 set 访问器的要点是在这些方法中添加测试以检查参数是否满足特定条件,然后再允许外部函数获取和设置任何内容,如下所示:> 私有字符串 myName;public string MyName;//这是一个属性,专用于 c#,用于设置支持字段.private string myName = "mary";//后备字 ..
发布时间:2022-01-04 23:22:45 C#/.NET

速记访问器和修改器

我正在学习 C#,并且正在学习如何将字段设为类私有,并使用 Getter 和 Setter 公开方法而不是字段值. 是get;set; 在方法 1 和 方法 2 中等效吗?例如一个是另一个的简写? 班级学生{//实例字段私有字符串名称;私有int标记;//方法一公共字符串名称 { 获取;放;}//方法二公众号{得到{返回标记;}设置 { 标记 = 值;}}} 最后,当您想在获取或设置值之 ..
发布时间:2022-01-04 23:20:06 C#/.NET

为什么 VBA Me 关键字不能访问自己模块中的私有过程?

我刚刚发现 Me 关键字无法访问私有过程,即使它们在自己的类模型中. 在 Class1 中取以下代码: 私有子消息()Debug.Print "一些私有程序."结束子公共子 DoSomething()我的消息结束子 这段代码实例化了一个类的实例: Sub TestClass()将 objClass 调暗为新 Class1objClass.DoSomething结束子 Me.Messa ..
发布时间:2022-01-04 11:49:25 其他开发

在内部使用属性有什么好处?

从类外部访问成员时,封装显然是有用和必不可少的,但是在内部引用类变量时,是调用它们的私有成员还是使用它们的getter更好?如果您的 getter 只是返回变量,是否有任何性能差异? 解决方案 不应该有显着的性能差异,您坚持使用属性的原因是因为这就是封装的全部意义所在.它使这些私有成员的所有访问保持一致和受控.因此,如果您想更改属性 getter/setter,您不必考虑“我是否需要在我决 ..
发布时间:2022-01-02 18:43:21 C#/.NET

有什么理由使用自动实现的属性而不是手动实现的属性?

我理解 PROPERTIES 相对于 FIELDS 的优势,但我觉得使用 AUTO 实现的属性而不是 MANUAL 实现的属性并没有真正提供任何优势,除了让代码看起来更简洁一些. 我觉得使用起来更舒服: 私有字符串 _postalCode;公共字符串邮政编码{得到 { 返回 _postalCode;}设置 { _postalCode = 值;}} 代替: public string ..
发布时间:2022-01-02 18:10:59 C#/.NET

属性 vs. 字段:需要帮助掌握属性在字段上的使用

首先,我已经阅读了有关此主题的帖子列表,但由于我对封装和字段修饰符(private、public..ect)的了解,我觉得我没有掌握属性. 我开始学习的 C# 的主要方面之一是通过使用封装在代码中保护数据的重要性.我“认为"我理解这是因为使用修饰符(私有、公共、内部、受保护)的能力.然而,在了解了属性之后,我不仅对属性的使用,而且对 C# 中数据保护(我理解为封装)的整体重要性/能力的理解都 ..
发布时间:2022-01-02 18:06:35 C#/.NET

如何在 IntelliSense 中隐藏公共方法

我想从 IntelliSense 成员列表中隐藏公共方法.我创建了一个属性,当应用于方法时,将导致在构造其对象时调用该方法.我这样做是为了更好地支持部分类.问题在于,在某些环境(例如 Silverlight)中,反射无法访问私有成员,甚至无法访问子类的私有成员.这是一个问题,因为所有的工作都是在一个基类中完成的.我必须公开这些方法,但我希望它们对 IntelliSense 隐藏,类似于 Obsol ..
发布时间:2021-12-26 14:22:57 C#/.NET

依赖注入必须以牺牲封装为代价吗?

如果我理解正确,依赖注入的典型机制是通过类的构造函数或类的公共属性(成员)注入. 这暴露了被注入的依赖,违反了 OOP 封装原则. 我确定这种权衡是否正确?你如何处理这个问题? 另请参阅下面我对自己问题的回答. 解决方案 您可能会发现另一种看待这个问题的方式. 当我们使用 IoC/依赖项注入时,我们没有使用 OOP 概念.诚然,我们使用面向对象的语言作为“宿主",但 ..

如何在不破坏封装的情况下返回对 RefCell 内某些内容的引用?

我有一个具有内部可变性的结构. 使用 std::cell::RefCell;struct MutableInterior {隐藏_我:i32,vec:Vec i32 ,}结构 Foo {//虽然没有在这个特定的片段中使用,//激励问题使用内部可变性//通过RefCell.内部:RefCell,}impl Foo {pub fn get_items(&self) ->&Vec{&self ..