C# 如何重写基类';数据库连接字符串?

C# 如何重写基类';数据库连接字符串?,c#,dll,database-connection,overriding,app-config,C#,Dll,Database Connection,Overriding,App Config,我有一个基类(使用C#.net编写),它使用数据集从数据库中提取数据,连接字符串位于App.config文件中。因此,在编写基类之后,它已被编译成dll 要在不同的项目中使用这个基类,我必须重写DB连接字符串,因此首先可以这样做吗?如果可能,有人能给我举个例子吗?在基类中使连接字符串成为受保护的虚拟财产 class Base { protected virtual string ConnectionString { get { ... } } // Get from config. }

我有一个基类(使用C#.net编写),它使用数据集从数据库中提取数据,连接字符串位于App.config文件中。因此,在编写基类之后,它已被编译成dll


要在不同的项目中使用这个基类,我必须重写DB连接字符串,因此首先可以这样做吗?如果可能,有人能给我举个例子吗?

在基类中使连接字符串成为受保护的虚拟财产

class Base {
    protected virtual string ConnectionString { get { ... } } // Get from config.
}

class Sub {
    protected override string ConnectionString { get { ... } } // return the new value.
}

我建议给类一个重载构造函数,如下所示:

private readonly string connectionString;

public Foo() : this(Settings.Default.DbConnectionString) {
}

public Foo(string connectionString) {
    this.connectionString = connectionString;
}
然后派生类就可以将“重写的”连接字符串传递到构造函数中


我认为这比使用带有虚拟属性等的多态性更干净,特别是假设连接字符串在对象的生命周期内不会改变。您并没有真正改变行为(这是多态性的好处)-您正在改变初始化(这是构造函数参数的好处)。

如果将连接字符串写入App.config文件,则该字符串对于该项目是唯一的。关于你创建的这个基类,你到底有什么问题?@Ramhound,我告诉过它是一个基类,要写在其他项目中使用,基类会和DB对话,做一些动作,所以当我想在其他项目中使用它时,我想要一个函数,可以访问基类中的连接字符串,我可以重写这样的函数。。。如果您担心用于它的表是通用的,那么它也是通用的,即像日志表一样,最有可能是所有项目的通用表。。。我想我会尝试下面的一个答案…我正在使用一个静态类,当我尝试这样做时,它会返回一个错误,错误是-1:'Cntrs.countercache.countercache()':静态构造函数不能有显式的'this'或'base'构造函数调用错误-2:'Cntrs.countercache.countercache(字符串)“:静态构造函数必须是无参数的。有什么建议吗?@dvlpr:如果您使用的是静态类,那么它首先不能是基类。。。不能从静态类派生。我建议您首先不要使用静态类。