如何在C#中声明可选参数/默认值?

问题描述 投票:0回答:1

我通常在构造函数的参数中声明一个可选参数(默认值),如下所示:

public class XV
{
    public XV(int startPosition = 1) // Constructor
    { 
        this.StartPosition = startPosition;
    }

    public int StartPosition { get; set; } // Property
}

但是后来我发现自己正在看我写过这样的旧代码:

public class XV
{
    public XV( ... ) { ... } // Constructor
    public XV(int startPosition) // Constructor
    { 
        this.StartPosition = startPosition;
    }

    public int StartPosition { get; set; } = 1; // Property
}

与在构造函数中创建可选值相比,向属性添加= 1有什么用?是否仅支持构造函数中不存在的Properties的默认值?但是如果是这样,为什么不将它们添加到构造方法中呢?

c# properties default-value optional-parameters
1个回答
2
投票

使用optional argument第一种情况),可以调用给出值的函数无]。new XV();是对带有可选参数的函数的有效调用。即使您没有定义无参数构造函数。构造函数签名将匹配调用()(int)。实际上,对于一个可选参数来说,能够用一个签名匹配更多呼叫是一个很大的用例。

请注意,可选参数并非始终存在。它们仅在C#4.0中重新添加。所以旧的代码可能不会使用它,因为那在当时根本就不是问题。但是对于构造函数,constructor chaining通常用于定义实际默认值。

第二种情况下

,仅(int)呼叫有效。如果要使用默认值,则必须首先retrieve。因此,这几乎不是我所说的“默认值”。 “可靠的初始化”将是一个更好的术语。它确实没有用,可能会完全被编译器和JIT削减。

如果要使用无参数构造函数,则必须显式地编写一个(类以隐式无参数构造函数开始,但是任何显式构造函数都将其禁用。)>

© www.soinside.com 2019 - 2024. All rights reserved.