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

字號:

New的調(diào)用
    在C++中,new關(guān)健字可以在堆上生成一個對象。在C#中卻不是這樣。對于引用類型變量而言,new關(guān)健字在堆上生成一個對象;對于結(jié)構(gòu)等值類型變量而言,new關(guān)健字在棧中生成一個對象,并需要調(diào)用constructor。
    事實上,我們可以不使用new關(guān)健字而在棧上生成一個結(jié)構(gòu)類型的變量,但這時需要注意的是,New關(guān)健字能夠初始化對象。如果不使用new,則在使用前必須手工地對結(jié)構(gòu)中的所有成員進(jìn)行初始化,否則在編譯時會出錯。
    對象的初始化
    usingSystem;//有二個成員變量和一個構(gòu)造器的簡單結(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)建
    //編譯器編譯到這里時會出錯,因為p2的成員變量沒有被初始化
    //SomeMethod(p2);
    //手工對它們進(jìn)行初始化
    p2.x=1;
    p2.y=2;
    SomeMethod(p2);
    }