Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.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#Vars init、性能和良好实践_C#_Performance_Variables_Initialization - Fatal编程技术网

C#Vars init、性能和良好实践

C#Vars init、性能和良好实践,c#,performance,variables,initialization,C#,Performance,Variables,Initialization,我很抱歉,如果这个线程将被认为是主观的,但我的问题是更多的技术方面 我正在使用框架.NET4.0中的C#。我花了几年的时间玩C++,我接受了一个教育,在那些没有初始化的变量中,我在屁股上踢了一脚。 今天,每次我在C代码段中看到一个未初始化的变量,我都会有点发抖,我真的无法决定是否应该初始化它们 我读过很多文章,有人说,有些是初始化的,有些不是(成员与本地),我读过一些文章,有人说在C#中初始化变量会给性能带来麻烦 在我当前的应用程序中,我希望有良好的性能,但首先,我需要避免由于未初始化的变量而产

我很抱歉,如果这个线程将被认为是主观的,但我的问题是更多的技术方面

我正在使用框架.NET4.0中的C#。我花了几年的时间玩C++,我接受了一个教育,在那些没有初始化的变量中,我在屁股上踢了一脚。 今天,每次我在C代码段中看到一个未初始化的变量,我都会有点发抖,我真的无法决定是否应该初始化它们

我读过很多文章,有人说,有些是初始化的,有些不是(成员与本地),我读过一些文章,有人说在C#中初始化变量会给性能带来麻烦

在我当前的应用程序中,我希望有良好的性能,但首先,我需要避免由于未初始化的变量而产生愚蠢的错误

这方面的最佳实践是什么

编辑:

public MyClass
{
    private int foo; // Is it initialized ? Do I have to ?

    public void MyMethod()
    {
        int bar;  // Is it initialized ? Do I have to ?

        ...
    }
} // Is it a good practice to initialize every vars all the time or not ? 
  // Will I get troubles by not initializing those ?
  // If I do initialize them, will I get performance slowdown ?
我想知道,在C#中,所有变量是否都是自动 已初始化,或者在某些情况下没有初始化

当您声明引用类型变量(如
SomeClass
的实例)时,它的默认值将是
null
。一旦您使用new为变量分配了一些内存,它就会被初始化

SomeClass someClass; //not initialized, it's value is null

someClass = new SomeClass(); //initialized
另一方面,值类型在声明时初始化。比如说

int bar; //initialized with value 0
始终初始化每个变量是否是一种好的做法

嗯,这取决于具体情况。例如,当您声明bool时,它的默认值是
false
。但为了便于读者理解,最好明确地执行
boolmybool=false
。另一方面,如果必须将变量作为
out
传递给某个方法,则初始化变量是没有用的,因为它是方法的责任。这实际上取决于你的情景和你喜欢遵循的练习

不初始化它们会给我带来麻烦吗

如果您对默认值(未初始化的值)没有问题,那么您就不会遇到麻烦。但是,如果您的代码需要一些初始化值,而您的变量没有初始化,那么您可能会遇到麻烦

如果我对它们进行初始化,会导致性能下降吗

没有。如果你的应用程序的性能真的很慢,你应该使用一些分析器来找出是什么导致了性能慢。初始化变量不太可能导致性能问题

我想知道,在C#中,所有变量是否都是自动 已初始化,或者在某些情况下没有初始化

当您声明引用类型变量(如
SomeClass
的实例)时,它的默认值将是
null
。一旦您使用new为变量分配了一些内存,它就会被初始化

SomeClass someClass; //not initialized, it's value is null

someClass = new SomeClass(); //initialized
另一方面,值类型在声明时初始化。比如说

int bar; //initialized with value 0
始终初始化每个变量是否是一种好的做法

嗯,这取决于具体情况。例如,当您声明bool时,它的默认值是
false
。但为了便于读者理解,最好明确地执行
boolmybool=false
。另一方面,如果必须将变量作为
out
传递给某个方法,则初始化变量是没有用的,因为它是方法的责任。这实际上取决于你的情景和你喜欢遵循的练习

不初始化它们会给我带来麻烦吗

如果您对默认值(未初始化的值)没有问题,那么您就不会遇到麻烦。但是,如果您的代码需要一些初始化值,而您的变量没有初始化,那么您可能会遇到麻烦

如果我对它们进行初始化,会导致性能下降吗

没有。如果你的应用程序的性能真的很慢,你应该使用一些分析器来找出是什么导致了性能慢。在C中初始化变量不太可能导致性能问题

;在C/C++中,未初始化变量具有随机值时不会出现问题

某些变量(例如字段/静态变量)保证被初始化为其默认值(通常为null/0),并且编译器在所有情况下都会为您提供默认值不保证,并且您在使用之前没有手动初始化该变量

换句话说,如果您不确定,请相信编译器会告诉您

编辑:反之亦然,如果您手动将方法中的局部变量初始化为其默认值,并且编译器可以看到您在更改它之前从未使用过它,它将为您删除初始化,因此,除非您实际使用该值,否则没有开销。

在C中,您不会像在C/C++中那样遇到未初始化的变量具有随机值的问题

某些变量(例如字段/静态变量)保证被初始化为其默认值(通常为null/0),并且编译器在所有情况下都会为您提供默认值不保证,并且您在使用之前没有手动初始化该变量

换句话说,如果您不确定,请相信编译器会告诉您


编辑:反之亦然,如果您手动将方法中的局部变量初始化为其默认值,并且编译器可以看到您在更改它之前从未使用过它,它将为您删除初始化,因此,除非您实际使用该值,否则没有开销。

在C#中初始化或不初始化变量取决于您想要实现的目标,并且这两个选项在不同的情况下都有效

以公开某些属性的类为例,您希望这些属性具有默认值:

public class X 
{
    private object _propertyName;

    public object PropertyName
    {
         get { return _propertyName; }
         set 
         {
             _propertyName = value;
             doSomething();
         }
    }
}
在这个类中,如果您试图在设置属性值之前读取该属性的值,则保持未初始化的
\u propertyName
可能会使您遇到
NullReferenceException
,因此将其初始化为合适的默认值在这里是一种很好的做法

但是,有时您希望为用户提供传递