«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему абстрактные статические методы не поддерживаются в C#?

Почему абстрактные статические методы не поддерживаются в C#?

Опубликовано в 2025-02-06
Просматривать:484

Why are Abstract Static Methods Not Supported in C#?

понимание статических абстрактных методов в C#

абстрактные статические методы в C# - это функция, которая повышает любопытство среди разработчиков. Работая с поставщиками, можно столкнуться с сценарием, в котором они хотят создать абстрактный класс с абстрактным статическим методом. Изучение причин отсутствия этой функции дает более четкое понимание.

статические методы: более глубокий вид

статические методы не похожи на методы экземпляра в том, что они не требуют Объектный экземпляр, который будет доступен. Они вызываются через имя класса, а не через ссылку на объект. Код промежуточного языка (IL), сгенерированный для статических вызовов метода, непосредственно называет класс, который определяет метод, независимо от вызова класса. Иллюстрируйте это, рассмотрите следующий код:

public Class A { Общественный статический тест Void () { } } открытый класс B: { } Классовая программа { Статический void main (string [] args) { B.test (); } }. .maxstack 8 L0000: NOP L0001: Call void consoleapplication1.a :: test () L0006: NOP L0007: ret обратите внимание, что вызов сделан для A.Test, даже если исходный код использовался B.Test. Это демонстрирует, что вызов статического метода разрешается во время компиляции, основанное на классе, который определяет метод, а не в вызовом классе.

виртуальные методы и статические вызовы
public class A
{
    public static void Test()
    {
    }
}

public class B : A
{
}

class Program
{
    static void Main(string[] args)
    {
        B.Test();
    }
}

virtual Методы обеспечивают полиморфное поведение, позволяя различным реализациям одного и того же метода в производных классах. Тем не менее, статические вызовы не виртуальны в .NET, поскольку они напрямую нацелены на конкретный метод, основанный на имени класса. Следовательно, виртуальные или абстрактные статические методы не будут служить практической цели в C#.

public class A
{
    public static void Test()
    {
    }
}

public class B : A
{
}

class Program
{
    static void Main(string[] args)
    {
        B.Test();
    }
}
Заключение

из -за того, что статические методы в C# вызываются через имена классов с Нет полиморфизма, концепция абстрактных статических методов не имеет существенного использования. Следовательно, это не поддерживается языком.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3