2009-11-24 81 views

回答

9

如果您的工廠和您的類在同一個程序集中,您可以在內部標記構造函數。這將使得程序集外的任何類都不能調用構造函數(沒有反射)。您的工廠在同一個裝配中,將構造函數視爲公共的,因此可以訪問它們。

或者,您可以使構造函數專用,並在工廠內使用反射來實例化對象。你使用反射進行了一次小小的打擊,但是這沒有彙編限制,並且還用於使同一彙編中的其他類不使用工廠以外的其他類。

+0

謝謝,我正在考慮的反思,但不希望我不得不走這一步我已經添加了一個答案與一些示例代碼。 – Simon 2009-11-25 09:09:21

0

您需要多少保護?

只需將該構造函數標記爲「使用工廠!」即可。應該在大多數情況下工作。 (如果它不工作,加上「如果你不使用工廠:-)

在出廠你打開警告過你會被解僱。

1

一些示例代碼中,我與反射放在一起與私有構造函數實例化對象:

Private Shared Function CreateObject(Of t)() As t 

    Try 
     Dim ci As ConstructorInfo = GetType(Class1).GetConstructor(CType(BindingFlags.Instance + BindingFlags.NonPublic, _ 
         BindingFlags), Nothing, Type.EmptyTypes, Nothing) 

     Dim x As t = CType(ci.Invoke(Nothing), t) 

     Return x 

    Catch ex As NullReferenceException 
     Throw New MissingMethodException("No private constructor found") 

    Catch ex As Exception 
     Throw 
    End Try 

End Function