Почему я не могу использовать абстрактные статические методы в C#?

Статические методы нельзя c#.net наследовать или переопределять, поэтому language-design они не могут быть абстрактными. Поскольку dotnet статические методы определены dotnet для типа, а не для экземпляра c# класса, они должны вызываться visual-c# явно для этого типа. Поэтому, когда c#.net вы хотите вызвать метод дочернего csharp класса, вам нужно использовать .net-framework его имя для его вызова. Это language-design делает наследование неактуальным.

Предположим, вы csharp можете на мгновение наследовать c#.net статические методы. Представьте c# себе такой сценарий:

public static class Base
{
    public static virtual int GetNumber() { return 5; }
}

public static class Child1 : Base
{
    public static override int GetNumber() { return 1; }
}

public static class Child2 : Base
{
    public static override int GetNumber() { return 2; }
}

Если c#.net вы вызовете Base.GetNumber(), какой dot-net метод будет вызван? Какое .cs-file значение возвращено? Довольно language-design легко увидеть, что без создания c# экземпляров объектов наследование csharp довольно сложно. Абстрактные c# методы без наследования — это c#-language просто методы, у которых .net-framework нет тела, поэтому их нельзя csharp вызвать.

c#

.net

language-design

2022-11-18T08:16:36+00:00
Вопросы с похожей тематикой, как у вопроса:

Почему я не могу использовать абстрактные статические методы в C#?