New的調(diào)用
在C++中,new關(guān)健字可以在堆上生成一個(gè)對(duì)象。在C#中卻不是這樣。對(duì)于引用類型變量而言,new關(guān)健字在堆上生成一個(gè)對(duì)象;對(duì)于結(jié)構(gòu)等值類型變量而言,new關(guān)健字在棧中生成一個(gè)對(duì)象,并需要調(diào)用constructor。
事實(shí)上,我們可以不使用new關(guān)健字而在棧上生成一個(gè)結(jié)構(gòu)類型的變量,但這時(shí)需要注意的是,New關(guān)健字能夠初始化對(duì)象。如果不使用new,則在使用前必須手工地對(duì)結(jié)構(gòu)中的所有成員進(jìn)行初始化,否則在編譯時(shí)會(huì)出錯(cuò)。
對(duì)象的初始化
usingSystem;//有二個(gè)成員變量和一個(gè)構(gòu)造器的簡(jiǎn)單結(jié)構(gòu)
publicstructPoint
{
publicPoint(intx,inty)
{
this.x=x;
this.y=y;
}
publicintx;
publicinty;
}
publicclassTester
{
publicstaticvoidMain()
{
Testert=newTester();
t.Run();
}
publicvoidRun()
{
Pointp1=newPoint(5,12);
SomeMethod(p1);//fine
Pointp2;//不調(diào)用new而直接創(chuàng)建
//編譯器編譯到這里時(shí)會(huì)出錯(cuò),因?yàn)閜2的成員變量沒(méi)有被初始化
//SomeMethod(p2);
//手工對(duì)它們進(jìn)行初始化
p2.x=1;
p2.y=2;
SomeMethod(p2);
}
在C++中,new關(guān)健字可以在堆上生成一個(gè)對(duì)象。在C#中卻不是這樣。對(duì)于引用類型變量而言,new關(guān)健字在堆上生成一個(gè)對(duì)象;對(duì)于結(jié)構(gòu)等值類型變量而言,new關(guān)健字在棧中生成一個(gè)對(duì)象,并需要調(diào)用constructor。
事實(shí)上,我們可以不使用new關(guān)健字而在棧上生成一個(gè)結(jié)構(gòu)類型的變量,但這時(shí)需要注意的是,New關(guān)健字能夠初始化對(duì)象。如果不使用new,則在使用前必須手工地對(duì)結(jié)構(gòu)中的所有成員進(jìn)行初始化,否則在編譯時(shí)會(huì)出錯(cuò)。
對(duì)象的初始化
usingSystem;//有二個(gè)成員變量和一個(gè)構(gòu)造器的簡(jiǎn)單結(jié)構(gòu)
publicstructPoint
{
publicPoint(intx,inty)
{
this.x=x;
this.y=y;
}
publicintx;
publicinty;
}
publicclassTester
{
publicstaticvoidMain()
{
Testert=newTester();
t.Run();
}
publicvoidRun()
{
Pointp1=newPoint(5,12);
SomeMethod(p1);//fine
Pointp2;//不調(diào)用new而直接創(chuàng)建
//編譯器編譯到這里時(shí)會(huì)出錯(cuò),因?yàn)閜2的成員變量沒(méi)有被初始化
//SomeMethod(p2);
//手工對(duì)它們進(jìn)行初始化
p2.x=1;
p2.y=2;
SomeMethod(p2);
}

