我知道这个问题被问了一遍又一遍,但我似乎找不到足够好的答案。因此,为了弄清楚我想知道什么,我将把它分成两个问题:
为什么接口不能有静态方法签名?我将尝试抢占非答案,询问为什么在世界上我想用以下方法做到这一点:我希望能够静态
GetDbConnectionType()
调用SqliteCodeGenerator
andMssqlCodeGenerator
:interface ICodeGenerator { // this is the method I would like to be static: string GetDbConnectionType(); } abstract class CodeGeneratorBase : ICodeGenerator { public abstract string GetDbConnectionType(); public void GenerateSomeCode(StringBuilder s) { s.AppendLine("var foo = new " + GetDbConnectionType() + "();"); } } class SqliteCodeGenerator : CodeGeneratorBase { public override string GetDbConnectionType() { return "SQLiteConnection"; } } class MssqlCodeGenerator : CodeGeneratorBase { public override string GetDbConnectionType() { return "SqlConnection"; } }
另一方面,这是第二个问题的问题,如果您知道实现上述目标的好选择,那么无论如何......