Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

Ответ 3

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

  • "static" используется, когда у вас есть класс, которому не требуется поддерживать информацию о состоянии для отдельного объекта, но вместо этого для этого класса сохраняется информация о состоянии. Примерами являются статические переменные.
  • Другое дело, объявляя класс как статический, где в объекте нельзя создать экземпляр вместо него, вы можете вызвать статические методы, которые не должны иметь свою собственную информацию о состоянии.

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

Ответ 4

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

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

Ответ 5

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

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

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

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

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;}
    }

}

Ответ 6

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