在类外使用的命名参数

时间:2016-04-01 20:20:15

标签: c# language-concepts

我理解在C#中存在命名参数之类的东西,因此有点误导。我的问题是他们应该被称为一般性的。

在我使用其他语言的库时,我有时会遇到可以在类的函数中使用的预定义值。

object.myFunc(SPECIAL_VALUE);

它通常以所有国会大厦字母命名,并且是函数中非常具体的值。我认为它的行为很像公共静态字符串但是当我使用这个想法时,intellisense并没有选择它。有人可以告诉我这种参数选项的一般名称,如果它们存在,使用这种东西的利弊。

谢谢,

3 个答案:

答案 0 :(得分:0)

通常,C#中的那些常量会像这样声明和装入......

public const String MyConstantThingHere = "Some value";

在Java中,它更像是......

public static final String MY_CONSTANT_THING_HERE = "Some value";

我只想调用这些公共类常量。请参阅HERE

另外,供参考:http://www.dofactory.com/reference/csharp-coding-standards

您也可以使用静态导入来引用它们......

见这里:static imports in c#

答案 1 :(得分:0)

我不太确定,你是什么意思。此示例中显示了C#中命名参数的概念:

namespace Testconsole {

public class obj {
    public int myFunc(int value1, int value2 = 4, int value3 = 8) {
        return value1 + value2 + value3;
    }
}

class Program {
    static void Main(string[] args) {
        obj adder = new obj();
        Console.WriteLine(adder.myFunc(value1: 1, value3: 1));
        Console.ReadLine();
    }
}
}

Testconsole返回6:value1设置为'1',value3设置为'1',value2缺失,因此填充默认值'4'。

还可以将公共静态字符串传递给函数:

namespace Testconsole {

    public class obj {
        public String myFunc(String mySpecialValue) {
            return "now I " + mySpecialValue;
        }
    }

    class Program {
        public static String SPECIAL_VALUE = "got it";

        static void Main(string[] args) {
            obj Learn = new obj();
            Console.WriteLine(Learn.myFunc(SPECIAL_VALUE));
            Console.ReadLine();
        }
    }
}

控制台输出:

Now I got it.

答案 2 :(得分:0)

你指的是“常数”。它们有两个目的:

他们确保在一个地方声明具有某种意义的值(如你所说的“特殊值”)并重新使用,以便如果它发生变化,我们会在一个地方更改它。

它们使我们的代码更具可读性。例如,我们可能希望两个始终显示网页上列表中的前四项。我们的输入可能总是长度为四个字符。如果其他人只是阅读我们的代码并在这里看到数字4,那么数字4的含义可能并不明显。我们希望我们的代码尽可能易于理解。

所以当我们宣布

const int NUMBER_OF_ITEMS_TO_DISPLAY = 4

const string MAX_INPUT_LENGTH_SETTINGS_KEY = "maximumInputLength"

然后,当我们在代码中使用这些常量时,其他人可以知道它们的含义。

使用常量的相反方法是使用“魔术数字”或“魔术字符串”。它们只出现在我们的代码中,没有上下文或解释。它可能只是我们任意选择的值,但将其声明为常量会给出它的背景和意义。

不需要大写字母。它们只是一种使常量易于识别的惯例。