gpt4 book ai didi

c# - 如何正确连接现有的密封类?

转载 作者:行者123 更新时间:2023-11-30 20:47:01 24 4
gpt4 key购买 nike

在 CodeReview 上对我的代码进行审查后,我陷入了如何使我的代码片段更抽象的问题。

正如您在 here 中看到的那样,许多人建议我应该创建一个 ICommandIConnection 接口(interface),以便更容易重构。

在我的示例中,我将只使用 IConnection,但整体也应该对 ICommand 有效。

我想我必须创建一个这样的界面;

public interface IConnection
{
//etc...
}

然后,为了使 MySqlConnection 能够从我的 IConnection 继承,我必须创建自己的 MySqlConnection 来继承像这样;

public class MySqlConnection : MySql.Data.MySqlClient.MySqlConnection, IConnection
{
//etc...
}

这意味着新的 MySqlConnection 仍然有它的方法和字段, 将从 IConnection 继承。然后我应该能够像这样编写一个 Database 类;

public abstract class Database
{
protected IConnection con;
}

然后像这样扩展它;

public class MySqlDatabase : Database
{
private override IConnection con = new MySqlConnection();
}

现在,我的问题是,MySqlConnection密封的;我无法扩展它,因此我不知道有什么方法可以使这个数据库类抽象。

问题是;有没有合适的方法来实现 Database 的抽象?如果有,我该怎么做?

请注意,这个问题与类是单例无关(如我的 CodeReview 帖子所示)。该问题已发布,与问题无关。

最佳答案

阅读关于该代码审查的评论,我实际上认为他们的意思是使用 IDbConnectionIDbCommand 而不是自己滚动。所有 ADO.NET 提供程序都已经实现了这些。

但是,如果您愿意,可以继承 DbConnectionIConnection包装 MySqlConnection。您必须实现所有 DbConnection 方法并将它们中继到包装的连接:

public sealed class MyMySqlConnection : DbConnection, IConnection
{
public MyMySqlConnection(MySqlConnection underlyingConnection)
{
UnderlyingConnection = underlyingConnection;
}

public MySqlConnection UnderlyingConnection
{
get;
private set;
}

public override void Open()
{
UnderlyingConnection.Open();
}

// ...

关于c# - 如何正确连接现有的密封类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26175160/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com