当前位置:  开发笔记 > 编程语言 > 正文

如何使这个类通用?(.NET C#)

如何解决《如何使这个类通用?(.NETC#)》经验,为你挑选了2个好方法。

我的班级有以下核心:

class SmartDbConnection
{
    private readonly IDbConnection Connection;

    public SmartDbConnection(string ConnectionString)
    {
        if(ConnectionString.Contains("MultipleActiveResultSets=true"))
        {
            Connection = new SqlConnection(ConnectionString);
        }
    }
}

我不希望它有"SqlConnection"硬编码.所以我想把它变成一个Generic类(接受IDbConnection类).但我不知道该怎么做.有人可以帮忙吗?



1> Marc Gravell..:

首先 - 我已经补充说IDisposable,因为我认为这很重要.

其次,请注意提供商是另一种选择:

class SmartDbConnection
{
    private DbConnection Connection;

    public SmartDbConnection(string provider, string connectionString)
    {
        Connection = DbProviderFactories.GetFactory(provider)
            .CreateConnection();
        Connection.ConnectionString = connectionString;
    }
    public void Dispose() {
        if (Connection != null)
        {
            Connection.Dispose();
            Connection = null;
        }
    }
}

如果你必须通用,那怎么样:

class SmartDbConnection : IDisposable where T : class,
    IDbConnection, new()
{
    private T Connection;

    public SmartDbConnection(string connectionString)
    {
        T t = new T();
        t.ConnectionString = connectionString;
        // etc
    }
    public void Dispose() {
        if (Connection != null)
        {
            Connection.Dispose();
            Connection = null;
        }
    }
}



2> 小智..:

为什么不接受IDbConnection而不是连接到你的ctor?

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有