我有一个基类(使用C#.net编写),它使用数据集从DB中提取数据,连接字符串在App.config文件中。因此在编写基类之后,它已被编译为dll。
要将此基类用于不同的项目,我必须覆盖数据库连接字符串,所以首先可以做,如果可能的话,任何人都可以给我一个例子吗?
答案 0 :(得分:3)
我建议给你的类一个重载的构造函数,如下所示:
private readonly string connectionString;
public Foo() : this(Settings.Default.DbConnectionString) {
}
public Foo(string connectionString) {
this.connectionString = connectionString;
}
然后派生类可以将“重写”连接字符串传递给构造函数。
我认为这比使用虚拟属性等多态更清晰 - 特别是因为可能连接字符串在对象的生命周期中不会改变。你并没有真正改变行为(这是多态性的好处) - 你正在改变初始化(这是构造函数参数的优点)。
答案 1 :(得分:0)
使连接字符串成为基类中受保护的虚拟属性
class Base {
protected virtual string ConnectionString { get { ... } } // Get from config.
}
class Sub {
protected override string ConnectionString { get { ... } } // return the new value.
}