2010-10-24 65 views
4

如何創建防止類直接實例化的工廠類?防止直接實例化的工廠類

說,我有類的評論,應該只從一個類CommentFactory實例化。 我不希望評論能夠直接實例化。

我想我可以做到這一點:

public partial class Comment 
    { 
    private Comment(){} 
    public Comment CreateComment(User user,string str) 
    { 
     Comment cmt=new Comment(); 
     user.AddComment(cmt); 
     cmt.User=user; 
     return cmt;  
    } 
    } 

此代碼乾淨嗎?

現在,我面臨的問題是Comment是Linq to SQL部分實現的部分類。 Linq to SQL創建了這個類的公共構造函數,那麼我怎樣才能繞過這個?有沒有'詭計'?

回答

0

你在問什麼可以回答here。這不完全相同,但解決方案將幾乎完全相同。

我認爲至少有3個技巧來解決你的問題,所以它會爲你增加更多的靈活性。

0

如果Comment和CommentFactory在同一個程序集中,則使Comment內部的所有構造函數都會阻止程序集外部的任何代碼創建Comment的實例。

+0

是的,我不想訪問Comment構造函數的代碼位於同一個程序集中。創建一個不同的程序集,我應該創建一個新的dll項目? – Attilah 2010-10-24 03:48:13

+0

是的,如果你創建了一個新的dll項目,只要Comment的構造函數是'internal',那個項目中的任何代碼就不能創建Comment實例。 – 2010-10-24 04:00:28

0

您可以將構造函數internal標記爲CommentFactory所在的程序集,然後讓消費者訪問CommentFactory類。我不知道如何「執行」它。