2013-12-11 13 views
-1

我正在寫一個類,其中包含一些功能和屬性以及文本。如何在c#中編寫不可更改的類?

我希望每個使用我課程的人都能看到函數,文本和屬性,但無法更改它們。

如何做到這一點?

而在高級中,我希望他們可以添加一些其他功能和文本和屬性,但不能改變我寫的現有的功能。

接下來怎麼做?

更新

有包含CRUD功能的類。它由我寫的代碼生成器創建。現在人們可以添加創建的類並使用其功能來執行CRUD功能。我不想盡可能將它作爲一個dll文件,我不想讓整個班級再次儘可能地只讀。我只想當人們在他們的項目中包含創建的類時,他們可以添加另一個函數,但它們不能更改或刪除使用代碼生成器生成的函數。

+0

看看Access Modifier:http://msdn.microsoft.com/en-us/library/wxh6fsc7.aspx – Smartis

+0

什麼是文本?什麼是「不改變它們」_,你的意思是改變屬性的價值還是你的意思是重寫屬性和方法? – CodeCaster

+0

這一切都取決於你打算如何分配代碼?如果你提供它作爲一個DLL,那麼用戶不能改變你的代碼,儘管當然可以從現有的類中得到(如果你允許的話)。 – James

回答

3

我只是想當人們在他們的項目中包括創建的類,他們可以添加另一個功能,但他們不能改變或刪除生成的功能與代碼生成器

不幸的是,一旦您分發代碼,開發人員完全控制它,您就無法做到這一點。通常不建議修改生成的代碼,但是,如果代碼包含錯誤或不兼容並需要進行調整,它實際上可以發揮您的優勢。

最好的方法是讓您生成的代碼類partial,這使得它更容易擴展,例如,

namespace My.Generated.Code 
{ 
    public partial class GeneratedClass 
    { 
     ... 
    } 
} 
... 

namespace Some.Other.Project 
{ 
    using My.Generated.Code; 

    public partial class GeneratedClass 
    { 
     public string NewProperty { get; set; } 

     public void NewMethod() 
     { 
     } 
    } 
} 

只要你不作任何屬性在您生成virtual類,那麼開發商可以添加新的行爲/屬性,但不能修改現有的。

+0

非常感謝您,但我可以根據您的經驗提出一個問題,而不是與編程有關嗎? 我該如何說服一位不懂編程的老闆,並且剛剛聽說過,代碼生成器是一件好事,當我們所有人都知道它不被推薦時,強迫大量的代碼生成器? –

+0

@HamidReza編寫代碼生成器並不認爲它是一個糟糕的主意,很多應用程序/工具都有使用它們(特別是VS)。我猜這個問題更多的是你真的需要一個嗎?你需要說服你的老闆說明你不需要的原因,這不是我可以幫助你的事情,因爲我不知道你的申請和目的。 – James

+0

是的,但他想要的是一個代碼生成器,它生成模型和存儲庫層,並將它們的類庫作爲dll文件進行生成,而且沒有人可以更改它們。這意味着在完成代碼生成器項目之後,我們的其他項目將在其存儲庫和模型和應用程序類庫中只有一個DLL,而沒有其他項目。他的想法是從每一個角度來看都是一個真正的弱點,但是... –

1

您可以將您的類編譯爲.dll,以便其他用戶可以將其添加到他的項目中,並且不能更改它。他也可以繼承並添加他自己的方法而無需更改父類。

+0

查看OP的更新,他們不想將它作爲DLL提供 - 它是一個自動生成的類。 – James

0

讓你的類作爲基類或創建一個接口/抽象類,並讓其他繼承它,他們可以添加功能/性能/方法,但所有你做的事情是一樣的,除非它是虛擬的