c# - Private Constructor in SqlConnection class Takes Parameter SqlConnection class -
i inspection sqlconnection
.net reflector.
i noticed there private constructor, interestingly takes parameter sqlconnection
class.
the main question wonder * why sqlconnection
takes sqlconnection
class? * , use of private constructors?
private sqlconnection(sqlconnection connection) { this._reconnectlock = new object(); this._originalconnectionid = guid.empty; this.objectid = interlocked.increment(ref _objecttypecount); gc.suppressfinalize(this); this.copyfrom(connection); this._connectionstring = connection._connectionstring; if (connection._credential != null) { securestring password = connection._credential.password.copy(); password.makereadonly(); this._credential = new sqlcredential(connection._credential.userid, password); } } public sqlconnection() { this._reconnectlock = new object(); this._originalconnectionid = guid.empty; this.objectid = interlocked.increment(ref _objecttypecount); gc.suppressfinalize(this); this._innerconnection = dbconnectionclosedneveropened.singletoninstance; }
update: guide of hvd's answer found 1 usage:
object icloneable.clone() { sqlconnection sqlconnection = new sqlconnection(this); bid.trace("<sc.sqlconnection.clone|api> %d#, clone=%d#\n", this.objectid, sqlconnection.objectid); return (object) sqlconnection; }
you don't need use reflector that, source code freely available online.
what's more, freely available online version of source code shows point of constructor is: it's used in sqlconnection
's implementation of icloneable.clone
. new connection's properties supposed match old connection's properties, , easiest way copying properties. class designers decided shouldn't attempt clone sqlconnection
creating new sqlconnection
, clearly, some new connection object needs created, , other public constructors aren't match implementation of clone
. so, new constructor created, , access restricted not (mis)used others.
Comments
Post a Comment