当前位置:  开发笔记 > 编程语言 > 正文

将私有常量用作公共方法的默认参数背后的想法是什么?

如何解决《将私有常量用作公共方法的默认参数背后的想法是什么?》经验,为你挑选了4个好方法。

令我惊讶的是,这个编译并运行:

class Program
{
    static void Main()
    {
        DoSomething();
    }

    private const int DefaultValue = 2; // <-- Here, private.

    public static void DoSomething(int value = DefaultValue)
    {
        Console.WriteLine(value);
    }
}

该方法是公共的,而默认值"重定向"到常量私有变量.

我的问题:

这个"概念"背后的想法是什么?

我的理解(直到今天)是,只有所有其他"引用"元素也是公开的,才能使用公共事物.

更新:

我只是ILSpy反编译我的课找到:

static class Program
{
    private static void Main()
    {
        Program.DoSomething(2);
    }

    private const int DefaultValue = 2;

    public static void DoSomething(int value = 2)
    {
        Console.WriteLine(value);
    }
}

因此,如果私有常量作为默认参数在例如库中完成,则库的用户仍然可以看到默认参数.



1> Fabjan..:

这个"概念"背后的想法是什么?

这个想法是因为const值是静态的并且永远不会改变 - 您可以将它用作方法的可选参数的默认值,就像使用普通值一样.来自MSDN的引用:

每个可选参数都有一个默认值作为其定义的一部分.如果没有为该参数发送参数,则使用默认值.默认值必须是以下类型的表达式之一:

一个恒定的表达;

表达式为新的ValType(),其中ValType是值类型,例如枚举或结构;

形式为default(ValType)的表达式,其中ValType是值类型.


我的理解(直到今天)是,只有所有其他"引用"元素也是公开的,才能使用公共事物

从技术上讲,这是正确的.但是在你的场景中,两个成员都是可访问的,因为它们是在同一个类中定义的,但是const在我们的例子中应该在类之外定义Program它在类中是不可访问的Program.



2> George Vovos..:

当您使用const时,编译器会将所有出现的变量替换为实际值,因此您的代码与此相同:

public static void DoSomething(int value = 2)


它仍然很重要,因为你只能使用常量值作为默认参数值.

3> poke..:

常量变量在编译时被替换,因此它们从未真正存在于生成的程序集中.所以使用常量的代码与直接使用常量值完全相同.好处是您可以在其他地方重用常量,只需要在一个位置更改它.

现在,由于常量在编译时总是被替换,因此将它们设置为public或private的效果也很简单:它只会影响其他类型在编译时可以访问它的内容.因此,如果您只想将常量保持为当前类型,则使用私有常量可能会有所帮助,而公共常量可以在整个应用程序中使用.



4> Jon Hanna..:

该名称DefaultValue是私人的,但数字2仍然是数字2.

因为DefaultValue是私人的,我们无法Program.DefaultValue从外面访问Program.大概我们不会特别想要.

而且因为我们根本无法定义DefaultValue,所以当我们研究工作方式时,我们可能会关心它Program.

因此,当我们定义一个默认值时,DoSomething可能有一些逻辑上的原因,为什么我们想要的值恰好与值相同DefaultValue.

因此,能够在那里使用那个常数可能是有益的,原因与我们在任何地方都能找到有益的常数一样.

而且,由于DefaultValue这只是一种Program特定的说法2,我们没有理由不这样做.

当然,元数据将反映这个作为2,而不是(无意义的外)DefaultValue,但随后将举行,如果constpublic无论如何(关于默认值的元数据,只给出了价值,而不是它是否与任何定义的常量) .

所以没有缺点.

所以考虑到:

    实施者有一个优势.

    用户没有任何不利,只是使用文字2.

    防止它必须引入一个特殊规则作为规则的例外,定义的常量可以在文字的常量值的任何地方使用.

为什么不?

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有