Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 私有方法参数_C# - Fatal编程技术网

C# 私有方法参数

C# 私有方法参数,c#,C#,我有一个可选参数的方法 public static Test(String connection, Int32 retryInfiniteLoopGuard = 0) 是否有一种方法可以将retryinfinifieloopguard标记为private,以便在从类外部调用该方法时它将不可见 如果您想知道为什么,retryInfiniteLoopGuard用于递归执行,用户不应该看到它 今天我使用重载,但还有其他方法吗?使用该参数创建方法的私有重载,并从公共verson中删除该参数。然后使公共

我有一个可选参数的方法

public static Test(String connection, Int32 retryInfiniteLoopGuard = 0)
是否有一种方法可以将
retryinfinifieloopguard
标记为
private
,以便在从类外部调用该方法时它将不可见

如果您想知道为什么,
retryInfiniteLoopGuard
用于递归执行,用户不应该看到它


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

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

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

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

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

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

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

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

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

我不知道为什么需要它,但是你可以创建两种类似的方法

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

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

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

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

public static Test(String connection)
{
     Test(connection, 0);
}
编辑:此功能似乎从未添加到中。 在新的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
编辑:此功能似乎从未添加到中。 在新的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


不完全是他们想要的-带有额外
int
的重载应该是私有的。那么你真的认为我不知道重载吗?重载显然解决了你的问题。将第一种方法设置为私有还是公共是您的决定。所以,问题解决了。@george.zakaryan:如果你公开第一个问题,问题就没有解决。顺便说一句,我打赌没有其他方法不完全是他们想要的-额外
int
的重载应该是私有的。那么你真的认为我不知道重载吗?重载显然解决了你的问题。将第一种方法设置为私有还是公共是您的决定。所以,问题解决了。@george.zakaryan:如果你公开第一个问题,那么问题就没有解决。顺便说一句,我打赌没有其他办法。那么你真的认为我不知道过载吗?@user1662812:的确,在您编辑问题之前是这样的。@user1662812您可能会惊讶于我们对此处所提问题的假设或不假设。我们必须——也应该——保持一个非常开放的心态。那么你真的认为我不知道过载吗?@user1662812:事实上,在你编辑你的问题之前,它看起来是这样的。@user1662812你会惊讶于我们对这里所问问题的假设或不假设。我们必须——也应该——保持一个非常开放的心态。纯粹出于病态的好奇心——你为什么想要另一种方式?因为与C#4.0中引入可选参数的原因相同。。。我只想更进一步,隐藏可选参数C#4.0中的可选参数值是通过在调用站点注入这些值来编译的。也就是说,即使您的代码是
Test(connection)
,编译器实际上也会生成一个类似
Test(connection,0)
的调用。因此,如果不使用重载,就无法实现您想要的行为。纯粹出于病态的好奇-为什么您想要另一种方式?因为与C#4.0中引入可选参数的原因相同。。。我只想更进一步,隐藏可选参数C#4.0中的可选参数值是通过在调用站点注入这些值来编译的。也就是说,即使您的代码是
Test(connection)
,编译器实际上也会生成一个类似
Test(connection,0)
的调用。因此,如果不使用重载,就无法实现您想要的行为。您如何使这项工作适合您?我的目标是.NET Framework 4.6.1(目前最新版本)并使用VS2017,但这对我来说是不可用的。我不认为这是在C#6中发布的。实际上,我来这里是为了在C#6中存在类似的东西。但事实并非如此。@CME64我不记得回答过这个问题,但我可能感到困惑,也可能是因为我看到一个功能正在讨论中,但它从未真正实现过,奇怪的是。你是如何做到这一点的?我的目标是.NET Framework 4.6.1(目前最新版本)并使用VS2017,但这对我来说是不可用的。我不认为这是在C#6中发布的。实际上,我来这里是为了在C#6中存在类似的东西。但似乎不是这样。@CME64我不记得回答过这个问题,但我要么是感到困惑,要么是看到一个功能正在讨论中,但它从未真正实现过,奇怪。