Wenn die Klasse nicht eine von Ihnen ist, dann klingt es so, als ob die API absichtlich geschrieben wurde, um dies zu verhindern, was bedeutet, dass es möglich ist, dass Ihr Ansatz nicht das ist, was die API-Autoren beabsichtigten. Sehen Sie sich die Dokumentation an und prüfen Sie, ob es einen empfohlenen Ansatz für die Verwendung dieser Klasse gibt.
Wenn Sie tun Kontrolle über die Klasse haben und dieses Muster implementieren möchten, wird es normalerweise über eine statische Methode für eine Klasse implementiert. Dies ist ein Schlüsselkonzept, das auch das Singleton-Muster ausmacht.
Zum Beispiel:
public PrivateCtorClass
{
private PrivateCtorClass()
{
}
public static PrivateCtorClass Create()
{
return new PrivateCtorClass();
}
}
public SomeOtherClass
{
public void SomeMethod()
{
var privateCtorClass = PrivateCtorClass.Create();
}
}
Das SqlCommandParameter Zeug ist ein gutes Beispiel. Sie erwarten, dass Sie Parameter erstellen, indem Sie Dinge wie dieser Aufruf:
var command = IDbConnnection.CreateCommand(...);
command.Parameters.Add(command.CreateParameter(...));
Mein Beispiel ist nicht groß Code, weil es keine Befehlsparametereigenschaften oder Wiederverwendung von Parametern/Kommandos Einstellung nicht zeigen, aber Sie bekommen die Idee.
Eine leichte Verbesserung dieser handlichen statischen Methode besteht im Aufbau des Parametertyps Array dynamisch – nrjohnstone
@nrjohnstone Wenn Sie GetType für jedes Array-Element meinen, ist es im Allgemeinen aufgrund von Nullen nicht möglich. Wenn Sie versuchen, die Typen in diesem Fall abzuleiten, implementieren Sie eine vollständige Überladungsauflösung entsprechend der Sprache Ihrer Wahl, die im Falle von C# nicht trivial ist. –