1

我有这个带有可选参数的方法。

public static Test(String connection, Int32 retryInfiniteLoopGuard = 0)

有没有办法以某种方式将其标记retryInfiniteLoopGuard为,private以便在从类外部调用该方法时它变得不可见?

如果您想知道为什么,retryInfiniteLoopGuard是用于递归执行并且不应该对用户可见......

今天我使用重载,但是还有其他方法吗?

4

3 回答 3

17

使用该参数创建方法的私有重载,并从公共版本中删除该参数。比使用默认值使公共版本调用私有版本:

private static int Test(string connection, int retryInfiniteLoopGuard)
{
    // The code
}

public static int Test(String connection)
{
    return Test(connection, 0);
}

没有其他方法可以实现这一目标。

于 2012-09-24T11:01:59.610 回答
4

编辑:此功能似乎从未添加过。

在新的 C# 6 中,您可以执行以下操作:

public static int Test(String connection, private Int32 retryInfintiteLoopGuard = 0)
{
    /* Enter Code Here */
}

它编译为:

private static int test(String connection, Int32 retryInfiniteLoopGuard)
{
    /* Enter Code Here */
}
public static int Test(String connection)
{
   return test(connection, 0);
}

其工作方式是所有参数都隐含地与方法一样可访问,当然除非另有明确说明。支持的访问器是:

public
internal
protected
private
于 2015-12-05T05:19:29.120 回答
1

不知道你为什么需要它,但你可以创建两个这样的方法

public static Test(String connection, Int32 retryInfiniteLoopGuard)
{
    //method body
}

public static Test(String connection)
{
     Test(connection, 0);
}
于 2012-09-24T11:03:41.377 回答