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()