Questions tagged «private»

私有是一种封装在面向对象程序设计中的方法。

1
C ++中的静态构造函数?我需要初始化私有静态对象
我想要一个带有私有静态数据成员(包含所有字符az的向量)的类。在Java或C#中,我可以创建一个“静态构造函数”,该构造函数将在创建该类的任何实例之前运行,并设置该类的静态数据成员。它只运行一次(因为变量是只读的,只需要设置一次),并且由于它是类的函数,因此可以访问其私有成员。我可以在构造函数中添加代码,以检查向量是否已初始化,如果尚未初始化,则将其初始化,但这会引入许多必要的检查,而且似乎不是解决问题的最佳方法。 我想到,由于变量将是只读的,因此它们只能是公共静态const,因此我可以在类外设置它们一次,但是再一次,这看起来像是一个丑陋的hack。 如果我不想在实例构造函数中初始化私有静态数据成员,是否可以在类中拥有私有静态数据成员?

19
Java中私有静态变量的用途是什么?
如果将变量声明为public static varName;,则可以从任意位置访问它ClassName.varName。我还知道,静态成员由类的所有实例共享,并且不在每个实例中重新分配。 声明变量与声明变量有private static varName;什么不同private varName;吗? 在这两种情况下,都不能以任何其他类ClassName.varName或ClassInstance.varName任何其他类的形式对其进行访问。 将变量声明为静态变量是否赋予它其他特殊属性?

7
有什么方法可以调用私有方法吗?
我有一个使用XML和反射将Objects 返回到另一个类的类。 通常,这些对象是外部对象的子字段,但是有时我想即时生成它。我已经尝试过类似的方法,但无济于事。我相信这是因为Java不允许您访问private进行反射的方法。 Element node = outerNode.item(0); String methodName = node.getAttribute("method"); String objectName = node.getAttribute("object"); if ("SomeObject".equals(objectName)) object = someObject; else object = this; method = object.getClass().getMethod(methodName, (Class[]) null); 如果提供的方法正确private,则失败NoSuchMethodException。我可以通过制作方法来解决它public,或者制作另一个类来派生它。 长话短说,我只是想知道是否存在private一种通过反射访问方法的方法。
146 java  reflection  private 



16
在Ruby中对受保护的私有方法进行单元测试的最佳方法是什么?
使用标准Ruby Test::Unit框架对Ruby中受保护的方法和私有方法进行单元测试的最佳方法是什么? 我确定有人会提出并断然断言“您应该仅对公共方法进行单元测试;如果需要进行单元测试,则不应将其作为受保护的方法或私有方法”,但是我对此并不感兴趣。我有几个方法被保护的或私有的良好和有效的原因,这些私人/受保护的方法是相对复杂的,并且在类的公共方法依赖于这些保护/私有方法正常工作,所以我需要一种方法来测试受保护/私有方法。 还有一件事...我通常将给定类的所有方法放在一个文件中,并将对该类的单元测试放在另一个文件中。理想情况下,我希望所有魔术都能将这种“受保护和私有方法的单元测试”功能实现到单元测试文件(而不是主源文件)中,以使主源文件尽可能简单明了。

9
使用mocha和node.js对私有功能进行单元测试
我正在使用Mocha以便对为node.js编写的应用程序进行单元测试 我想知道是否可以对模块中未导出的功能进行单元测试。 例: 我在其中定义了很多功能 foobar.js function private_foobar1(){ ... } function private_foobar2(){ ... } 以及一些作为公共导出的功能: exports.public_foobar3 = function(){ ... } 测试用例的结构如下: describe("private_foobar1", function() { it("should do stuff", function(done) { var stuff = foobar.private_foobar1(filter); should(stuff).be.ok; should(stuff)..... 显然,这是行不通的,因为private_foobar1没有导出。 对私有方法进行单元测试的正确方法是什么?摩卡咖啡有内置的方法吗?

5
是否可以通过反思设置私有财产?
我可以通过反思设置私有财产吗? public abstract class Entity { private int _id; private DateTime? _createdOn; public virtual T Id { get { return _id; } private set { ChangePropertyAndNotify(ref _id, value, x => Id); } } public virtual DateTime? CreatedOn { get { return _createdOn; } private set { ChangePropertyAndNotify(ref _createdOn, value, x …

9
有什么理由在C#中编写“ private”关键字?
据我所知,private是默认无处不在C#中(也就是说,如果我不写public,protected,internal等这将是private默认情况下)。(如果我错了,请纠正我。) 那么,写该关键字的原因是什么,或者为什么它甚至对于成员来说仍然存在? 例如,当事件处理程序自动生成时,它看起来像这样: private void RatTrap_MouseEnter(object sender, CheeseEventArgs e) { } 但是,如果隐含和默认了,为什么还要写私有呢?只是这样,新手开发人员(谁不知道这是C#默认值)便知道它是私有的?还是编译器有区别? 此外,是否存在写“私有”(单独)会改变成员可访问性的情况?

2
为什么“ private val”和“ private final val”不同?
我常想,private val和private final val一样,直到我在斯卡拉参考看到第4.1节: 常量值定义为以下形式 final val x = e 其中e是一个常量表达式(第6.24节)。final修饰符必须存在,并且不能给出类型注释。对常量值x的引用本身被视为常量表达式。在生成的代码中,它们将替换为定义的右侧e。 我写了一个测试: class PrivateVal { private val privateVal = 0 def testPrivateVal = privateVal private final val privateFinalVal = 1 def testPrivateFinalVal = privateFinalVal } javap -c 输出: Compiled from "PrivateVal.scala" public class PrivateVal { public int testPrivateVal(); Code: 0: …
100 scala  private  final 

10
Python只读属性
我不知道何时属性应该是私有的,是否应该使用属性。 我最近读到,setter和getters不是pythonic,我应该使用属性装饰器。没关系。 但是,如果我有属性,该属性不能从类外部设置,而是可以读取的(只读属性)。这个属性应该是私有的self._x吗?我所说的私有是指下划线吗?如果是,那么不使用getter怎么读?我现在知道的唯一方法是写 @property def x(self): return self._x 这样我就可以读取属性,obj.x但是我无法设置它,obj.x = 1所以很好。 但是,我真的应该在乎设置不应该设置的对象吗?也许我应该离开它。但是话又说回来,我不能使用下划线,因为阅读obj._x对于用户来说很奇怪,所以我应该使用下划线obj.x,然后用户又一次不知道他一定不能设置该属性。 您的看法和做法是什么?

7
私有方法真的安全吗?
在Java中,private访问修饰符被认为是安全的,因为它在类外部不可见。然后外面的世界也不知道这种方法。 但是我认为Java反射可以用来打破这一规则。考虑以下情况: public class ProtectedPrivacy{ private String getInfo(){ return "confidential"; } } 现在从另一堂课我将获得信息: public class BreakPrivacy{ public static void main(String[] args) throws Exception { ProtectedPrivacy protectedPrivacy = new ProtectedPrivacy(); Method method = protectedPrivacy.getClass().getDeclaredMethod("getInfo", null); method.setAccessible(true); Object result = method.invoke(protectedPrivacy); System.out.println(result.toString()); } } 这时我只是觉得私有方法仍然安全,因为要做上面的事情我们必须知道方法名称。但是,如果类包含由其他人编写的私有方法,那么我们将看不到那些。 但是,由于下面的代码行,我的观点变得无效。 Method method[] = new ProtectedPrivacy().getClass().getDeclaredMethods(); 现在,它method[]包含了需要做的所有事情。我的问题是,有没有一种方法可以避免使用Java反射做这种事情? …

5
为什么可以在复制构造函数中访问私有变量?
我了解到,只有在类中具有get函数时,我才能访问私有变量。但是,为什么我可以在复制构造函数中访问它呢? 例: Field::Field(const Field& f) { pFirst = new T[f.capacity()]; pLast = pFirst + (f.pLast - f.pFirst); pEnd = pFirst + (f.pEnd - f.pFirst); std::copy(f.pFirst, f.pLast, pFirst); } 我的声明: private: T *pFirst,*pLast,*pEnd;

6
什么时候在Swift中使用@objc?
在Swift中,我看到一些类似的方法: @objc private func doubleTapGestureRecognized(recognizer: UITapGestureRecognizer) 我想知道何时使用@objc?我读了一些文档,但他们说要在Objective-C中调用它时,应添加@objc标志 但是,这是Swift中的私有函数,@ obj的作用是什么?

5
Rails中受保护的私有方法
Ruby的方法可见性(公共方法,受保护方法和私有方法)已在本博客文章之类的地方得到了很好的解释。但是在Ruby on Rails中,由于框架的设置方式,它似乎与常规Ruby应用程序中的稍有不同。因此,在Rails模型,控制器,助手,测试等中,何时/不适合使用受保护的方法或私有方法? 编辑:谢谢你到目前为止的答案。我了解Ruby中保护和私有的概念,但我希望更多地解释在Rails应用的各个部分(模型,控制器,助手,测试)的上下文中使用这些可见性的典型方式。 。例如,公共控制器方法是操作方法,应用程序控制器中受保护的方法用于需要多个控制器访问的“帮助器方法”等。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.