Я знаю, что этот вопрос задавали снова и снова, но я не могу найти достаточно хорошие ответы. Поэтому, чтобы понять, что я хочу знать, я разделить это на два вопроса:Почему интерфейсы не могут указывать статические методы?
Почему не интерфейсы имеют статические сигнатуры метода? Постараюсь упредить не-ответы спрашивают, почему в мире, я хотел бы сделать это следующим: Я хотел бы быть в состоянии статически вызвать
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"; } }
На с другой стороны, и это вопрос второй вопрос, если вы знаете о хорошей альтернативой для достижения вышеупомянутой цели, а затем всеми средствами ...
Неправильный DUP, это это одна: http://stackoverflow.com/questions/248263/why-cant- i-declare-c-sharp-methods-virtual-and-static – Joe
Возможный дубликат [Почему C# (или .NET) не позволяет нам статический/совместно используемый метод внутри интерфейса?] (http: // stackoverflow .com/questions/1062468/why-shouldnt-cor-net-allow-us-to-put-a-static-shared-method-in-an-inter) – nawfal
Возможный дубликат [Почему я не могу объявить методы C# виртуальный и статический?] (https://stackoverflow.com/questions/248263/why- cant-i-declare-c-sharp-methods-virtual-and-static) – JHG