Почему я не могу использовать абстрактные статические методы в 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
Почему я не могу использовать абстрактные статические методы в C#?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.