问题标签 [private-members]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net - MSIL - 如何从 MSIL 调用私有方法?
我正在编写一个“弱事件工厂” - 将任何 Delegate 转换为具有相同签名的新委托的代码,但在目标上实现 WeakReference。我正在使用 MSIL 来避免对 Delegate.CreateDelegate 的调用(其性能已被证明很慢)。
只要底层方法(原始委托的方法)被声明为公共的,弱引用委托就可以完美地工作。一旦使用私有或匿名方法,MSIL 就会在运行时使用MethodAccessException进行轰炸。
使用已编译的表达式树,我已经能够调用私有方法,因此必须可以动态发出调用私有方法的 MSIL。......那么下面有什么问题?
那么调用私有成员的秘诀是什么?反射可以做到,表达式树可以做到……为什么上面的代码会失败?
编辑:非常感谢所有在这里提供答案的人。事实证明,在我的上下文中始终有效的唯一解决方案是使用泛型委托(Action)......因为 Action 源自 mscorlib,JIT 似乎非常乐意让它调用私有方法。尝试使用您自己的委托和 JIT pukes,就像您直接向目标发出 Call 或 Callvirt 一样。
任何有兴趣查看工作代码的人都可以前往codeplex - 这里给出的答案有助于实现 WeakDelegate 功能。
delphi - Delphi:写入后代类中的私有祖先字段
我需要修复第三方组件。这个组件的类有私有变量,被它的后代积极使用:
这是有效的,因为两个班级都在同一个单元中,所以他们有点“朋友”。
但是如果我尝试在一个新单元中创建一个新类
我无法再访问 FSomeVar,但我需要将其用于修复。而且我真的不想在我的代码中重现所有基类树。
如果可能的话,您能否建议一些快速破解来访问该私有字段而不更改原始组件的单元?
javascript - 如何在命名空间中创建私有变量?
对于我的 Web 应用程序,我正在 JavaScript 中创建一个命名空间,如下所示:
我还想创建“私有”(我知道这在 JS 中不存在)命名空间变量,但不确定使用的最佳设计模式是什么。
可不可能是:
或者设计模式会是别的东西吗?
c# - 为什么类实例可以更改私有成员变量?
此代码在 C# 中编译,在 PHP 中等效工作,但有人可以解释为什么otherTestClass._privateString
可以在这里更改的原因吗?
我会认为一个类的实例在任何情况下都不应该能够更改私有成员变量,并且尝试访问otherTestClass._privateString
会给出“由于保护级别而无法访问”错误。
但事实并非如此,那么为什么在其自己的类中实例化一个对象可以让您访问私有成员?而且,这不会在一定程度上破坏封装吗?还是我错过了一些明显的东西?
- (我不是在问上面的类设计是否是好的实践,只是想知道它背后的理论。)
编辑- 感谢您的回答和评论。澄清一下,我也很想知道能够做到这一点是否被认为是一个积极的特性,或者它是否是更好的编译时检查/代码清晰度的必要权衡/因为大多数其他语言都是这样做的或其他方式。在我看来,理想情况下编译器会阻止或警告你,但我离语言设计师还很远。任何关于这种方式的示例都可以让您做一些有用的事情(不违反封装),否则这些事情会很困难或不可能。
c++ - C++ 保护类的私有 char *
我了解关于类方法/属性构造的公共、私有、受保护的继承差异。但是,我的问题与指向空终止字符串的指针特别相关。
现在,在某个处理过程中,MyClass->SomeValue 被分配并填充了一个字符串值。没问题。现在,我想要一些调用源,它创建了我的“MyClass”对象的实例并需要其中的字符串值。由于 C++ 可以对指针和指向指针的指针等造成很多损害,我想将指针位置返回到分配的字符字符串,但不希望任何人更改值。这个默认值是否在编译器和内存管理内部控制?任何人将此类主要用于内部目的的风险很低,但这只是我的理解。
谢谢
java - 您如何决定定义变量“私有”?
我参加了一个工作面试。面试官问我为什么需要私有变量。如果您通过定义一个私有变量来实现某些目标,那么您不能通过定义 java 中定义的任何其他访问修饰符来实现相同的目标吗?
但是,如果我正在设计一个类,我该如何决定定义一个变量“私有”?
iphone - 为什么 iOS SDK 教程中的一切都是属性?
在我从 Apple 和其他地方在线阅读的大多数 iOS SDK 教程中,很多实例变量都是属性,即使它们只能从它们自己的类中访问。
EG 在 Facebook 最新的 iOS SDK 中,鼓励用户维护facebook
在应用程序委托中调用的 Facebook 类的实例。facebook"
是一个属性。然后在整个示例代码中将其称为“self.facebook”。但是“facebook”属性没有从应用程序委托之外的任何地方引用。
为什么是这样?我错过了什么?如果一个实例变量只在它自己的类中使用,我的倾向是不把它变成一个属性,这样它就不是公开可见的,而是简单地在类中facebook
而不是self.facebook
或 self->facebook
从类中引用它。
坦率地说,即使我需要 facebook 属性,我想我宁愿在应用程序委托中将其简单地称为“facebook”而不是“self.facebook”。
那么给了什么?为什么我到处都能看到房产?
c++ - 私人会员和免费功能的 Doxygen 评论?
我应该为私人成员和免费功能使用 Doxygen 评论吗?我来自 Java 世界,我从未为私人成员添加 Javadoc。这是 C++ 世界中可接受的做法吗?
oop - 有没有办法为具有私有成员的 VBA 类编写相等性测试,而不暴露这些私有成员存在的知识?
我做了相当多的 Excel VBA 编程,但不是很多都是面向对象的。这是不时出现的东西,这让我很烦恼,我想知道我是否缺少一些东西。
在 VBA 中,假设我有一个 C 类,其中定义了一些私有成员,如下所示:
如果 VBA 像 C++ 或(大多数?)其他支持 OOP 的语言一样工作,我可以编写一个成员函数来在 C 类的实例之间进行相等性测试,如下所示:
当然,这不会在 VBA 中编译,因为类成员函数只能访问调用它们的同一实例的私有类成员。我做过的最好的事情就是定义两个成员函数,如下所示:
它很麻烦,并且暴露了私有类成员存在的知识,但至少它避免了实际暴露私有类成员的值。
这是我能做的最好的吗?
编辑:
像往常一样,在回答之后,我意识到了一种更好的方式来表达这个问题。它的标题是“是否有一种更简洁的方法可以为具有私有成员的 VBA 类编写相等测试?” 当迪克回答时。