首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >公共密封类SqlConnection : DbConnection,ICloneable

公共密封类SqlConnection : DbConnection,ICloneable
EN

Stack Overflow用户
提问于 2014-05-24 10:14:22
回答 2查看 1.1K关注 0票数 4

请帮助我理解以下几点:

代码语言:javascript
复制
public sealed class SqlConnection : DbConnection, ICloneable {...}

在上述课程中,我有两个疑问。

  1. 在C#中,多重继承是不可能的(我们可以通过接口实现这一点)。但是这里DBconnection不是一个接口,那么它是如何支持多重继承的呢?
  2. Iclonable是一个接口。它有一个叫做object ()的方法。但是在Sqlconnection类中,该方法没有实现。怎么可能呢?

请帮助我理解这一点

EN

回答 2

Stack Overflow用户

发布于 2014-05-24 10:34:34

  1. 这里没有多重继承。您可以从一个类继承并实现多个接口。在这里,DBConnection是一个类,IClonable是一个interface
  2. IClonable被声明为Explicit Interface,这意味着您不能直接从类实例访问它,但必须显式转换为接口类型。

示例

代码语言:javascript
复制
interface IDimensions 
{
     float Length();
     float Width();
}

class Box : IDimensions 
{
     float lengthInches;
     float widthInches;

     public Box(float length, float width) 
     {
        lengthInches = length;
        widthInches = width;
     }

     // Explicit interface member implementation: 
     float IDimensions.Length() 
     {
        return lengthInches;
     }

    // Explicit interface member implementation:
    float IDimensions.Width() 
    {
       return widthInches;      
    }

 public static void Main() 
 {
      // Declare a class instance "myBox":
      Box myBox = new Box(30.0f, 20.0f);

      // Declare an interface instance "myDimensions":
      IDimensions myDimensions = (IDimensions) myBox;

      // Print out the dimensions of the box:
      /* The following commented lines would produce   compilation 
       errors because they try to access an explicitly implemented
       interface member from a class instance:                   */

      //System.Console.WriteLine("Length: {0}", myBox.Length());
    //System.Console.WriteLine("Width: {0}", myBox.Width());

    /* Print out the dimensions of the box by calling the methods 
     from an instance of the interface:                         */
    System.Console.WriteLine("Length: {0}", myDimensions.Length());
    System.Console.WriteLine("Width: {0}", myDimensions.Width());
    }
 }
票数 5
EN

Stack Overflow用户

发布于 2014-05-24 10:34:52

这不是多重继承。正如您正确地注意到的,DbConnection是一个类,而ICloneable是一个接口。只有一个基类DbConnection,所以这是单个继承。

至于Clone()方法,SqlConnection确实实现了它,但是使用了显式接口实现。这将隐藏Clone()方法,直到将SqlConnection对象视为ICloneable为止。当类的作者决定类应该实现一个接口时,类可以这样做,但是这个接口提供的方法通常没有意义调用这个特定的类。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23843786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档