Я знаю, что этот вопрос задавали снова и снова, но я не могу найти достаточно хорошие ответы. Поэтому, чтобы понять, что я пытаюсь понять, я разберу это в двух вопросах:
-
Почему интерфейсы не имеют сигнатур статических методов? Я попытаюсь вытеснить не-ответы, спрашивая, почему в мире я хотел бы сделать это со следующим: я хотел бы иметь возможность статически вызывать
GetDbConnectionType()
наSqliteCodeGenerator
иMssqlCodeGenerator
: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"; } }
-
С другой стороны, и это вопрос этого второго вопроса, если вы знаете хорошую альтернативу для достижения вышеупомянутой цели, то непременно...