Пример ниже придумал/упрощен, но отображает проблему, которую я вижу.
интерфейс со статическим методом.
Базовый класс, который реализует интерфейс.
два полученных класса. Один неявно реализует интерфейс, потому что базовый класс делает. Один из них явно указывает реализацию интерфейса (хотя это не нужно). < /P>
Вызов статический метод непосредственно на полученных классах работает, как и ожидалось. Почему)? Тогда я должен удалить новое ключевое слово из обоих производных классов. В этом случае реализация IFOO вызывается в неявном случае при вызове через общий тип.namespace TestConsole.TestStaticMethodOverride2;
internal class Program
{
static void Main(string[] args)
{
FooDerivedImplicit.Do();
Console.WriteLine();
FooDerivedExplicit.Do();
Console.WriteLine();
GenericCallStatic.Call();
Console.WriteLine();
GenericCallStatic.Call();
Console.WriteLine();
}
}
public interface IFoo
{
public static virtual void Do() => Console.WriteLine("IFoo:Do");
}
public class FooBase : IFoo
{
public static void Do() => Console.WriteLine("FooBase:Do");
}
public class FooDerivedImplicit() : FooBase // Implicitly IFoo
{
public static new void Do() => Console.WriteLine("FooDerivedImplicit:Do");
}
public class FooDerivedExplicit() : FooBase, IFoo // Explicitly says is IFoo
{
public static new void Do() => Console.WriteLine("FooDerivedExplicit:Do");
}
public static class GenericCallStatic where T : IFoo
{
public static void Call() => T.Do();
}
< /code>
выходы < /p>
fooderivedimplicit: do < /p>
FooderiedExplicit: do < /p>
foobas>
Подробнее здесь: https://stackoverflow.com/questions/796 ... ived-class