C# SqlConnection类中的私有构造函数采用参数SqlConnection类
我正在检查C# SqlConnection类中的私有构造函数采用参数SqlConnection类,c#,oop,sqlconnection,C#,Oop,Sqlconnection,我正在检查SqlConnection 我注意到有一个私有构造函数,有趣的是它将SqlConnection类作为参数 我想知道的主要问题是 *为什么SqlConnection需要SqlConnection类? *私有构造函数的用途是什么 private SqlConnection(SqlConnection connection) { this._reconnectLock = new object(); this._originalConnectionId = Guid.Empt
SqlConnection
我注意到有一个私有构造函数,有趣的是它将SqlConnection
类作为参数
我想知道的主要问题是
*为什么SqlConnection
需要SqlConnection
类?
*私有构造函数的用途是什么
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;
}
更新:
在的指导下,我发现了一个用法:
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;
}
object-ICloneable.Clone()
{
SqlConnection SqlConnection=新的SqlConnection(此);
Bid.Trace(“%d#,clone=%d#\n”,this.ObjectID,sqlConnection.ObjectID);
返回(对象)sqlConnection;
}
您不需要为此使用Reflector,源代码是
此外,免费在线版本的源代码立即向您展示了该构造函数的意义:它用于
SqlConnection
的ICloneable.Clone
实现。新连接的属性应该与旧连接的属性匹配,最简单的方法是复制属性。类设计人员决定,您不应该通过创建新的SqlConnection
来尝试克隆SqlConnection
,但显然,需要创建一些新的连接对象,而其他公共构造函数与clone
的实现并不匹配。因此,创建了一个新的构造函数,并对其访问进行了限制,以便其他人不能(错误地)使用它。至于第二个问题,在中通常使用私有构造函数。看起来像C++中的复制构造函数。我猜这就是它处理混合模式身份验证(sql vs windows)的方式。同样,我在猜测。另外,请注意.NET Reflector有一个Analyze
功能,可以告诉您有关引用您正在查看的代码的其他代码段的大量信息。谢谢。我还发现这个私有构造函数的其他用法有“FindUsagesAdvanced”,但没有时间详细检查。将根据新用法更新问题,并可能将您的答案标记为已接受。@guneysus我对此感到非常惊讶。如果构造函数是私有的
,并且没有被类公开,那么它就不可能实现。诚然,它是一个部分类
,但据我所知,这只是因为它被用作插入所有DbConnection
派生类通用代码的模板,并且它也不调用任何构造函数。我将等待您找到什么。不幸的是,我已检查了“包含重载”。:)简而言之,我发现只有一种用法object ICloneable.Clone()