Какая польза от статического модификатора в объектно-ориентированном программировании? - PullRequest
13 голосов
/ 27 апреля 2011

В одном из моих интервью меня спросили, что означает модификатор static. Я ответил, сказав интервьюеру, что объект статического класса не может быть создан, и другие полезные замечания.

Но интервьюер спросил, что толку от создания такого класса, объекты которого не могут быть созданы. По сути, они спрашивали, зачем вообще нужен static?

Я не совсем уверен, как ответить на этот вопрос. Что я должен был сказать?

Ответы [ 6 ]

18 голосов
/ 27 апреля 2011

Интервьюер, вероятно, хотел, чтобы вы обсуждали объектно-ориентированный дизайн и шаблоны, в большей степени, чем он хотел, чтобы вы повторили определение этого конкретного модификатора. Здесь действительно нет правильного ответа. Пуристы могут утверждать, что static - мерзость. Прагматики могут утверждать, что он заполняет зияющую дыру в абстракции «все является объектом», позволяя вам вызывать служебные методы, для которых нет смысла создавать новые объекты просто для их вызова. Каноническим примером этого является System.Math класс .

Общее практическое правило, которым руководствуется большинство программистов, заключается в том, что если данные, с которыми вы работаете, не связаны с каким-либо конкретным экземпляром объекта, вероятно, имеет смысл пометить это поле / метод как статическое. В противном случае он, вероятно, должен быть постоянным членом экземпляра объекта.

В документации MSDN уже есть довольно хорошее объяснение:

Используйте модификатор static для объявления статического члена, который принадлежит самому типу, а не конкретному объекту. Модификатор static может использоваться с классами, полями, методами, свойствами, операторами, событиями и конструкторами, но его нельзя использовать с индексаторами, деструкторами или типами, отличными от классов. Для получения дополнительной информации см. Статические классы и члены статических классов (Руководство по программированию в C #) .

Модификатор static также имеет более конкретное применение в C #, например, определение методов расширения (которые могут быть определены только внутри статического класса), определение методов взаимодействия и т. Д. Стоит также отметить, что все статические классы sealed в C #, потому что без конструктора они не могут быть унаследованы от.

3 голосов
/ 27 апреля 2011

Статика применяется не только к классам, члены также могут быть статическими.Причиной использования static является предоставление функциональности типа утилиты, которая не имеет смысла создавать экземпляр объекта для его использования.Например, почему вы хотите создать int для использования int.Parse()

2 голосов
/ 27 апреля 2011

Вы можете посмотреть на «статичность» по отношению к состоянию объекта / класса .

  1. «статический» используется, когда у вас есть класс, которому не нужно поддерживать информацию о состоянии для отдельного объекта, но вместо этого информация о состоянии сохраняется для класса. Примерами являются статические переменные.
  2. Другая вещь - это объявление самого класса как статического, в котором вместо объекта нельзя создать экземпляр, вы можете вызывать статические методы, которые не должны иметь собственную информацию о состоянии.

Другие привели несколько полезных примеров, и я не буду повторяться.

0 голосов
/ 21 января 2016

Модификатор static означает, что член класса принадлежит самому классу, а не его экземплярам.

Статический член не может быть реплицирован в приложении, даже если создано много экземпляров класса.

см. Следующую ссылку для получения дополнительной информации Статические модификаторы

См. Следующий пример класса с использованием статических членов:

class myClass
{
    static int x = 5;
    static string name = "Ashraf";

    public int X 
    {
        get {return x;}
        set {x = value;}
    }

    public string name 
    {
        get {return name;}
        set {name = value;}
    }

}
0 голосов
/ 27 апреля 2011

Статические классы полезны, когда они работают с внешними данными и не требуют установки или извлечения каких-либо полей в них.

0 голосов
/ 27 апреля 2011

См. http://msdn.microsoft.com/en-us/library/79b3xss3%28v=vs.80%29.aspx - объясняются преимущества статических классов.

Преимущество использования статического класса заключается в том, что компилятор может проверить, чтобы убедиться, что никакие члены экземпляра не являются случайнодобавлено.Компилятор гарантирует, что экземпляры этого класса не могут быть созданы.

...