Se la classe non è una delle tue, allora sembra che l'API sia stata scritta deliberatamente per impedirlo, il che significa che è possibile che il tuo approccio non sia quello che gli autori delle API intendevano. Dai un'occhiata ai documenti e verifica se esiste un approccio raccomandato per l'utilizzo di questa classe.
Se si do ha il controllo sulla classe e si desidera implementare questo modello, in genere viene implementato tramite un metodo statico su una classe. Questo è un concetto chiave che costituisce anche il modello Singleton.
Ad esempio:
public PrivateCtorClass
{
private PrivateCtorClass()
{
}
public static PrivateCtorClass Create()
{
return new PrivateCtorClass();
}
}
public SomeOtherClass
{
public void SomeMethod()
{
var privateCtorClass = PrivateCtorClass.Create();
}
}
La roba SqlCommandParameter è un buon esempio. Si aspettano di creare parametri chiamando le cose in questo modo:
var command = IDbConnnection.CreateCommand(...);
command.Parameters.Add(command.CreateParameter(...));
Il mio esempio non è grande codice, perché non dimostra l'impostazione delle proprietà dei parametri di comando o riutilizzo dei parametri/comandi, ma si ottiene l'idea.
fonte
2009-04-02 09:21:40
Un leggero miglioramento di questo pratico metodo statico è la creazione della matrice dei tipi di parametri dinamicamente – nrjohnstone
@nrjohnstone Se si intende GetType su ogni elemento dell'array, non è possibile in generale a causa di valori null. Inoltre, se si tenta di dedurre i tipi in questo caso si finirà per implementare una risoluzione di sovraccarico completa in base alla lingua scelta, che non è banale in caso di C#. –