假设我们有以下界面-
interface IDatabase {
string ConnectionString{get;set;}
void ExecuteNoQuery(string sql);
void ExecuteNoQuery(string[] sql);
//Various other methods all requiring ConnectionString to be set
}
前提条件是必须先设置/初始化ConnectionString,然后才能运行任何方法。
如果IDatabase是抽象类或具体类,则可以通过构造函数传递connectionString来某种程度地达到此前提条件-
abstract class Database {
public string ConnectionString{get;set;}
public Database(string connectionString){ ConnectionString = connectionString;}
public void ExecuteNoQuery(string sql);
public void ExecuteNoQuery(string[] sql);
//Various other methods all requiring ConnectionString to be set
}
另外,我们可以为每个方法创建一个connectionString参数,但它看起来比仅创建一个抽象类要糟糕得多-
interface IDatabase {
void ExecuteNoQuery(string connectionString, string sql);
void ExecuteNoQuery(string connectionString, string[] sql);
//Various other methods all with the connectionString parameter
}
问题-
- 有没有办法在接口本身中指定此前提条件?这是一个有效的“合同”,所以我想知道是否有语言功能或模式(抽象类解决方案更像是一种hack imo,除了每次都需要创建两种类型-接口和抽象类之外)这是必需的)
- 这更多是一种理论上的好奇-前提条件实际上是否属于LSP上下文中前提条件的定义?