【问题标题】:Named Parameters used outside of class类外使用的命名参数
【发布时间】:2016-04-01 20:20:14
【问题描述】:

我知道在 C# 中有命名参数之类的东西,所以这有点误导。我的问题是它们通常应该被称为什么。

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

object.myFunc(SPECIAL_VALUE);

它通常以所有大写字母命名,并且是函数中非常具体的值。我认为它的行为很像 public static string,但是当我使用这个想法时,智能感知不会选择它。谁能告诉我这种参数选项的通用名称,如果存在,使用这种东西的利弊。

谢谢,

【问题讨论】:

  • 这样的标识符大写是 C 语言的惯例。 C# 没有允许定义值的预处理器。使用 const 或只读变量或枚举。避免为这三种截然不同的标识符寻找一个名称。
  • 您是在说f(int x=1) 等参数的默认值,这些参数在未指定命名参数时使用?

标签: c# language-concepts


【解决方案1】:

通常,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#

【讨论】:

  • 如果我说这在 C# 中有效.. Object.Property = Class.MY_CONSTANT;有没有办法不使用“类”。
  • 是的,使用静态导入。我已经相应地更新了我的答案:)
【解决方案2】:

我不太确定,你的意思是什么。 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”填充。

也可以将 public static String 传递给函数:

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.

【讨论】:

    【解决方案3】:

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

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

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

    所以当我们声明

    const int NUMBER_OF_ITEMS_TO_DISPLAY = 4
    

    const string MAX_INPUT_LENGTH_SETTINGS_KEY = "maximumInputLength"
    

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-04
      • 2012-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-20
      相关资源
      最近更新 更多