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