Почему Stack.Peek() является методом?[закрыто]

StackOverflow https://stackoverflow.com//questions/22016083

  •  21-12-2019
  •  | 
  •  

Вопрос

Как в названии.Почему Куча классу нужен метод для возврата ссылки на верхний объект?Мне всегда говорили, что методы предполагают наличие каких-то вычислений и что вместо этого следует возвращать простые объекты со свойствами. Peek() У метода нет параметров, и на уровне кода это (я думаю) простая операция.

Вопрос в том:есть ли для этого конкретная причина?Любое скрытое поведение, влияющее на производительность?

РЕДАКТИРОВАТЬ: Я не знаю реализацию класса, но, например.если метод использует перечислитель ниже, то многократное повторение последнего элемента было бы неразумно.С другой стороны, если это одиночный IList, то это не должно оказывать большего влияния на производительность.

Это было полезно?

Решение

Peek — это глагол, поэтому в моей книге Peek() должен быть методом.Однако с другим именем это также может быть собственность.

Помните, что любое свойство имеет связанные методы get и/или set, поэтому в любом случае у вас будет метод.

Другие советы

Я понимаю вопрос как «почему это метод, а не свойство».

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

Документация не упоминает, что именно то, какая коллекция фактически используется для обработки стека, но в основном нет другого, более эффективного способа предоставить вам доступ только к «верхней» этой коллекции.Мы также не знаем, является ли «топ» даже первым или последним элементом, возможно, что стек держит отслеживание того, какой элемент является «верхним» и на самом деле не удаляет выскоченные элементы (по крайней мере, не каждый раз, когда онивыскочили) Во избежание необходимости перемещать каждый другой элемент (снова, предполагая, что они используют массив, подобные, а не связанные со структурой связанного списка).

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

и как C. emothuis упоминает в Его ответ , Peek - это em>глагол , поэтому метод более логичен.И как PEEK - это общая терминология для этой операции на стеках, она имеет больше смысла использовать это, чтобы использовать новый / другой термин, просто для использования свойства.

Я согласен, может быть недвижимостью как генеракодицетагкод или что-то, потому что это делает интимиальный смысл, но он бросил бы исключение или возвращать NULL, если он пуст?Свойства не должны бросать исключения, в соответствии с MSDN .

from Справка источника стека , вы 'увидим код, связанный с определенным исключением.

    // Returns the top object on the stack without removing it.  If the stack
    // is empty, Peek throws an InvalidOperationException.
    public virtual Object Peek() {
        if (_size==0)
            throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EmptyStack"));
        Contract.EndContractBlock();
        return _array[_size-1];
    }
.

Это теперь отличается от того, как будет обработана концепция выше свойства.Так один против другого.

Редактированная документация недвижимости.И не выигрышный ответ, но обеспечивая дальнейшее объяснение о логике, почему это не свойство.

Это инкапсуляция, это цель - ограничить доступ к компонентам объектов: http: http://en.wikipedia.org/wiki/encapsaStous_(object-oriented_programming)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top