标签: private-methods

JavaScript私有方法

要使用公共方法创建JavaScript类,我会执行以下操作:

function Restaurant() {}

Restaurant.prototype.buy_food = function(){
   // something here
}

Restaurant.prototype.use_restroom = function(){
   // something here
}
Run Code Online (Sandbox Code Playgroud)

这样我班级的用户可以:

var restaurant = new Restaurant();
restaurant.buy_food();
restaurant.use_restroom();
Run Code Online (Sandbox Code Playgroud)

如何创建一个可由buy_fooduse_restroom方法调用的私有方法,但不能由类的用户创建外部方法?

换句话说,我希望我的方法实现能够:

Restaurant.prototype.use_restroom = function() {
   this.private_stuff();
}
Run Code Online (Sandbox Code Playgroud)

但这不应该奏效:

var r = new Restaurant();
r.private_stuff();
Run Code Online (Sandbox Code Playgroud)

我如何定义private_stuff为私有方法,所以这两个都适用?

我已经阅读了Doug Crockford的几次写法,但看起来似乎不能通过公共方法调用"私有"方法,并且可以在外部调用"特权"方法.

javascript oop private-methods

454
推荐指数
12
解决办法
30万
查看次数

如何使用反射来调用私有方法?

我的类中有一组私有方法,我需要根据输入值动态调用一个.调用代码和目标方法都在同一个实例中.代码如下所示:

MethodInfo dynMethod = this.GetType().GetMethod("Draw_" + itemType);
dynMethod.Invoke(this, new object[] { methodParams });
Run Code Online (Sandbox Code Playgroud)

在这种情况下,GetMethod()不会返回私有方法.什么BindingFlags我需要提供以GetMethod()使其能找到私有方法?

.net c# reflection private-methods

314
推荐指数
6
解决办法
16万
查看次数

Ruby中的私有模块方法

我有两个问题

最佳实践

  • 我有一个算法,使用公共接口对数据结构执行某些操作
  • 它目前是一个具有许多静态方法的模块,除了一个公共接口方法之外都是私有的.
  • 有一个实例变量需要在所有方法之间共享.

这些是我能看到的选项,哪个最好?:

  • 模块与静态(红宝石"模块")的方法
  • 使用静态方法的
  • Mixin模块包含在数据结构中
  • 重构修改该数据结构的算法部分(非常小)并使其成为调用算法模块的静态方法的mixin

技术部分

有没有办法制作私有模块方法

module Thing
  def self.pub; puts "Public method"; end
  private
  def self.priv; puts "Private method"; end
end
Run Code Online (Sandbox Code Playgroud)

private中似乎有没有什么影响,我仍然可以调用Thing.priv没有问题.

ruby access-specifier private-methods

99
推荐指数
5
解决办法
7万
查看次数

私人方法的单元测试

我正在编写一些单元测试.特别是我想测试一些私有方法.

到目前为止,我已经提出了使用.

#define private public
Run Code Online (Sandbox Code Playgroud)

但我对此并不满意,因为它会从单元测试的角度破坏所有封装.

您使用什么方法对私有方法进行单元测试.

c++ unit-testing private-methods

93
推荐指数
7
解决办法
6万
查看次数

Python中的私有变量和方法

可能重复:
Python中对象名称之前的单下划线和双下划线的含义

对于Python中的私有成员和方法,我应该使用_foo(下划线)或__bar(双下划线)?

python private private-members private-methods

65
推荐指数
3
解决办法
12万
查看次数

覆盖Java中的私有方法

正如这里简洁描述的那样,在Java中覆盖私有方法是无效的,因为父类的私有方法是"自动最终的,并且从派生类中隐藏".我的问题主要是学术问题.

如何不允许父级的私有方法被"覆盖"(即,在子类中使用相同的签名独立实现),是不是违反封装?根据封装原则,子类无法访问或继承父级的私有方法.它是隐藏的.

那么,为什么要限制子类使用相同的名称/签名实现自己的方法呢?有没有一个很好的理论基础,或者这只是某种实用的解决方案?其他语言(C++或C#)对此有不同的规定吗?

java inheritance private-methods

58
推荐指数
4
解决办法
8万
查看次数

功能隐私和单元测试Haskell

你如何处理Haskell中的函数可见性和单元测试?

如果导出模块中的每个函数以便单元测试可以访问它们,则可能会冒其他人调用不应该在公共API中的函数.

我想到使用{-# LANGUAGE CPP #-}然后用以下方法包围出口#ifdef:

{-# LANGUAGE CPP #-}

module SomeModule
#ifndef TESTING
( export1
, export2
)
#endif
where
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?

haskell unit-testing private-methods

43
推荐指数
2
解决办法
4251
查看次数

私有方法命名约定

是否存在命名我称之为" _Add" 的私有方法的约定?我不是领先下划线的粉丝,但这是我的一个队友建议的.

public Vector Add(Vector vector) {
    // check vector for null, and compare Length to vector.Length
    return _Add(vector);
}

public static Vector Add(Vector vector1, Vector vector2) {
    // check parameters for null, and compare Lengths
    Vector returnVector = vector1.Clone()
    return returnVector._Add(vector2);
}

private Vector _Add(Vector vector) {
    for (int index = 0; index < Length; index++) {
        this[index] += vector[index];
    }
    return this;
}
Run Code Online (Sandbox Code Playgroud)

c# coding-style private-methods

36
推荐指数
6
解决办法
3万
查看次数

如何对C++类的私有成员(和方法)进行单元测试

我对单元测试很新,我有点困惑.

我试图在一个名为C++的类上进行单元测试(使用Boost单元测试框架)VariableImpl.这是详细信息.

class Variable
{
public:
  void UpdateStatistics (void) {
    // compute mean based on m_val and update m_mean;
    OtherClass::SendData (m_mean);
    m_val.clear ();
  }
  virtual void RecordData (double) = 0;

protected:
  std::vector<double> m_val;

private:
  double m_mean;
};

class VariableImpl : public Variable
{
public:
  virtual void RecordData (double d) {
    // put data in m_val
  }
};
Run Code Online (Sandbox Code Playgroud)

我的问题是如何检查均值是否正确计算?注意1)m_mean受保护,2)UpdateStatistics调用另一个类的方法,然后清除向量.

我能看到的唯一方法是添加一个getter(例如GetMean),但我根本不喜欢这个解决方案,也不认为它是最优雅的.

我应该怎么做?

如果我要测试私有方法而不是私有变量,我该怎么办?

TIA,

JIR

c++ unit-testing private-members private-methods

28
推荐指数
3
解决办法
3万
查看次数

公共方法的私有方法

我正在考试这StringTokenizer.java门课,脑海里浮现出几个问题.

我注意到其他类使用的公共方法调用了一些完成所有工作的私有方法.现在,我知道OOD的原则之一就是尽可能多地私有化并隐藏所有实现细节.我不确定我是否完全理解这背后的逻辑.

我理解,将字段设为私有以防止将无效值存储在其中非常重要(这只是众多原因之一).然而,当谈到私人方法时,我不确定它们为何如此重要.

例如,在StringTokenizer类的情况下,我们不能只将所有实现代码放在公共方法中吗?它如何对使用这些方法的类产生影响,因为这些方法的API(即调用这些公共方法的规则)将保持不变?我能想到为什么私有方法有用的唯一原因是它可以帮助你编写重复的代码.例如,如果所有公共方法都做了同样的事情,那么您可以声明一个执行此任务的私有方法,并且可以由公共方法使用.

其他问题,在私有方法中编写实现而不是公共方法有什么好处?

这是一个小例子:

public class Sum{

    private int sum(int a, int b){
        return a+b;
    }

    public int getSum(int a, int b){
        return sum(a,b);
    }
}
Run Code Online (Sandbox Code Playgroud)

VS ...

public class Sum{

    public int getSum(int a, int b){
        return a+b;
    }
}
Run Code Online (Sandbox Code Playgroud)

第一个样本如何更有益?

java encapsulation private-methods stringtokenizer public-method

28
推荐指数
1
解决办法
7万
查看次数