C# 語言規範--1.8 結構

來源:互聯網
上載者:User
規範

    類與結構有很多相似之處:結構可以實現介面,並且可以具有與類相同的成員類型。然而,結構在幾個重要方面不同於類:結構為實值型別而不是參考型別,並且結構不支援繼承。結構的值儲存在“在堆棧上”或“內聯”。細心的程式員有時可以通過聰明地使用結構來增強效能。

    例如,將 Point 定義為結構而不是類在運行時可以節省很多記憶體空間。下面的程式建立並初始化一個 100 點的數組。對於作為類實現的 Point,出現了 101 個執行個體對象,因為數組需要一個,它的 100 個元素每個都需要一個。

class Point
{
   public int x, y;
   public Point(int x, int y) {
      this.x = x;
      this.y = y;
   }
}
class Test
{
   static void Main() {
      Point[] points = new Point[100];
      for (int i = 0; i < 100; i++)
         points[i] = new Point(i, i*i);
   }
}
如果將 Point 改為作為結構實現,如

struct Point
{
   public int x, y;
   public Point(int x, int y) {
      this.x = x;
      this.y = y;
   }
}

    則只出現一個執行個體對象(用於數組的對象)。Point 執行個體在數組中內聯分配。此最佳化可能會被誤用。使用結構而不是類還會使應用程式運行得更慢或佔用更多的記憶體,因為將結構執行個體作為值參數傳遞會導致建立結構的副本。



相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。