Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.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#_Constructor_Coding Style_Default Value - Fatal编程技术网

C# 显式初始化构造函数中私有字段的默认值。。世界跆拳道联盟?

C# 显式初始化构造函数中私有字段的默认值。。世界跆拳道联盟?,c#,constructor,coding-style,default-value,C#,Constructor,Coding Style,Default Value,请考虑.NET 4.0库中的以下代码片段: private T[] array; private static T[] emptyArray; private int size; private int version; static Stack() { Stack<T>.emptyArray = new T[0]; } public Stack() { array = Stack<T>.emptyArray; size

请考虑.NET 4.0库中的以下代码片段:

private T[] array; 
private static T[] emptyArray; 
private int size; 
private int version; 

static Stack() 
{ 
    Stack<T>.emptyArray = new T[0]; 
} 

public Stack() 
{ 
    array = Stack<T>.emptyArray; 
    size = 0; 
    version = 0; 
}

在上面的示例中,除了公司的编码标准之外,将值类型私有字段初始化为默认值大小和版本有什么原因吗?

我认为初始化集合通常是一种好做法,主要是因为它可以确保开发人员在使用时不需要初始化任何东西,假设变量已经初始化

public class Store
{
    public Store()
    {
        // Ready to go!
        Products = new List<Product>();
    }

    public string Id {get;set;}
    public IList<Product> Products {get;set;}
}

您必须检查集合是否已初始化,如果未初始化,则执行此操作,否则。。。yawn

我认为初始化集合通常是一个好的做法,主要是因为它确保开发人员在使用时不需要初始化任何东西,并且只假设变量已经初始化

public class Store
{
    public Store()
    {
        // Ready to go!
        Products = new List<Product>();
    }

    public string Id {get;set;}
    public IList<Product> Products {get;set;}
}

您必须检查集合是否已初始化,如果未初始化,则执行此操作,否则。。。yawn

在我看来,将私有变量初始化为默认值没有必要,也没有好处,除非它是标准的一部分

编辑:有时候,它可能会有意义,因为它提高了代码的可读性——例如

public const OP_GET = 0;
public const OP_ADD = 1;
...

private int operation = OP_GET;

在我看来,除非它是标准的一部分,否则将私有变量初始化为它们的默认值是没有必要的,也没有好处的

编辑:有时候,它可能会有意义,因为它提高了代码的可读性——例如

public const OP_GET = 0;
public const OP_ADD = 1;
...

private int operation = OP_GET;

如果它们是基本数据类型,则不需要初始化,它们将始终采用默认值

int、long等的默认值始终为0,而bool的默认值为false等


如果是引用类型,您可能必须进行初始化,以便它们根据您的逻辑具有一些默认值,并避免空引用错误

如果它们是基本数据类型,您不需要进行初始化,它们将始终采用默认值

int、long等的默认值始终为0,而bool的默认值为false等


如果是引用类型,您可能必须进行初始化,以便根据您的逻辑使它们具有一些默认值,并避免空引用错误

否,至少没有技术原因。也许在某些情况下,我们可以这样做来说明一点,例如,如果你有一个某种计数器变量,你想弄清楚它是从零开始的。但我认为这也有点可疑。

不,没有,至少没有技术原因。也许在某些情况下,我们可以这样做来说明一点,例如,如果你有一个某种计数器变量,你想弄清楚它是从零开始的。但我觉得这也有点可疑