2012-09-02 12 views
1

我是.net新手,正在尋找關於如何最好地創建只讀對象結構的建議。這些結構在編譯時進行佈置,不會改變。我的目標是這樣的:在.net中創建只讀嵌套對象

Public Structure CatPair 
    Public code, name As String 
End Structure 

Public Structure Category 
    Public code, name As String 
    Public subcategories() As EpfPair 
End Structure 

Public ReadOnly categories() As Category = { 
    New Category With {.code = "Code1", .name = "cat title 1", .subcategories = Nothing 
    }, 
    New Category With {.code = "Code2", .name = "cat title 2", .subcategories = Nothing 
    }, 
    New Category With {.code = "Code3", .name = "cat title 3", .subcategories = Nothing 
    }, 
    New Category With {.code = "Code4", .name = "cat title 4", .subcategories = { 
      New CatPair With {.code = "subC1", .name = "subcat title 1"}, 
      New CatPair With {.code = "subc2", .name = "subcat title 2"}, 
      New CatPair With {.code = "subc3", .name = "subcat title 3"} 
     } 
    }, 
    New Category With {.code = "Code5", .name = "Cat title 5", .subcategories = Nothing 
    } 
} 

因此,對象實際上是常數,其中一些有子類別,有些則不是一個嵌套表。在這裏,我的目標是:

  1. 確保一切是隻讀的,並且
  2. 它的方式實現(如果可能的話),以便不使用此代碼我的ASP.net頁不承擔任何顯著每次加載頁面時初始化對象的開銷。我已經在App_Code文件夾中的模塊中聲明瞭該對象,因此我不確定編譯器如何處理不接觸該對象的頁面。
+4

你應該使用的術語是「不可變的」。 – Oded

+1

如果這是ASP.NET,則將其標記爲這樣。自從我做了ASP.NET以來,已經有一段時間了,所以我不記得確切的術語,但是在app.startup(而不是session.startup)中創建了類別。然後,所有會話和所有頁面僅引用相同的單個類別。 – Paparazzi

回答

1

您提供的代碼不會實現您的目標。爲了使對象不可變,您至少需要使對象的屬性只讀(無setter),只需傳遞構造函數參數中的所有內容即可。