Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.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#_Extension Methods - Fatal编程技术网

C# 您是否使用过私有扩展方法?

C# 您是否使用过私有扩展方法?,c#,extension-methods,C#,Extension Methods,使用私有扩展方法有什么好处吗?我没有发现它们有任何用处。如果C完全不允许他们,不是更好吗?考虑以下几点: public class MyClass { public void PerformAction(int i) { } } public static class MyExtensions { public static void DoItWith10(this MyClass myClass) { myClass.DoIt(10); }

使用私有扩展方法有什么好处吗?我没有发现它们有任何用处。如果C完全不允许他们,不是更好吗?

考虑以下几点:

public class MyClass
{
    public void PerformAction(int i) { }
}

public static class MyExtensions
{
    public static void DoItWith10(this MyClass myClass)
    {
        myClass.DoIt(10);
    }

    public static void DoItWith20(this MyClass myClass)
    {
        myClass.DoIt(20);
    }

    private static void DoIt(this MyClass myClass, int i)
    {
        myClass.PerformAction(i);
    }
}

我意识到这个例子在它当前的形式中没有多大意义,但是我相信你可以理解私有扩展方法提供的可能性,也就是说,拥有使用私有扩展进行封装或合成的公共扩展方法的能力。

我只是在谷歌上搜索了一下,因为我怀疑它们是否有多大用处。然而,这对他们来说是一个很好的说明性应用:


这有助于改进方法/类中代码的语法,但您不希望将该扩展方法提供的功能公开给代码库的其他区域。换句话说,作为常规私有静态助手方法的替代方法,我假设我们不想更改MyClass,否则您可以将DoIt函数作为MyClass中的普通函数。但是,如果DoItWith20可以调用PerformAction,那么为什么还要使用DoIt函数呢itself@ThanosPapathanasiouMyClass可能是您无权访问的代码。e、 g.第三方assembly@ThanosPapathanasiou当前位置我知道从逻辑的角度来看,这个例子是完美的,但这是我可以很快想出的。然而,它确实说明了私有扩展方法并非毫无意义。@Dolbz是的,我想到了这一点,这就是为什么我说我们不想(也许不能)改变它。我想如果我们有一个包含许多有用函数(不是扩展)的大型静态类否则,让扩展方法调用其他扩展方法会破坏使代码更健壮的整体目的我没有完全理解你在第一次阅读时所说的,主要是因为我倾向于避免使用大型帮助器类,而私有静态帮助器类才有意义,经过一番思考,我认为你的答案是正确的+1.