二級(jí)輔導(dǎo):由C++轉(zhuǎn)向C#需要注意的變化(二)

字號(hào):

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);
    }