То, почему не делает локальных статических переменных поддержки C# как C, делает?

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

Вы (а) хотите, чтобы навигация и контент были на 100% выше основной, или (б) хотите, чтобы навигация и контент были на одной высоте?

Я буду считать (б). ..если это так, я не думаю, что вы сможете сделать это, учитывая вашу текущую структуру страницы (по крайней мере, не с чистым CSS и без сценариев). Вам, вероятно, потребуется сделать что-то вроде:

<main div>
    <content div>
         <navigation div></div>
    </div>
</div>

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

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

63
задан John Saunders 26 June 2009 в 15:20
поделиться

5 ответов

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

Кроме того, Эрик Липперт много отвечает на подобные вопросы в своем блоге . Обычно в отвечал так : «Меня спрашивают:« Почему C # не реализует функцию X? ». Ответ всегда один и тот же: потому что никто никогда не проектировал, не специфицировал, не реализовывал, не тестировал, задокументировал и отправил эту функцию ". По сути, его ответы обычно сводятся к тому, что добавление какой-либо функции стоит денег, и поэтому многие потенциальные функции не реализованы, потому что они не оказались положительными при анализе затрат и выгод.

Меня спрашивают: «Почему в C # не реализована функция X?» все время. Ответ всегда один: потому что никто никогда не проектировал, не специфицировал, не внедрял, не тестировал, не документировал и не поставлял эту функцию ». По сути, его ответы обычно сводятся к тому, что добавление какой-либо функции стоит денег, и, следовательно, многие потенциальные функции не реализованы, потому что они не показали положительной стороны анализа затрат и выгод.

Меня спрашивают: «Почему в C # не реализована функция X?» все время. Ответ всегда один: потому что никто никогда не проектировал, не специфицировал, не внедрял, не тестировал, не документировал и не поставлял эту функцию ». По сути, его ответы обычно сводятся к тому, что добавление какой-либо функции стоит денег, и, следовательно, многие потенциальные функции не реализованы, потому что они не показали положительной стороны анализа затрат и выгод.

17
ответ дан 24 November 2019 в 16:06
поделиться

Состояние обычно является частью объекта или частью типа , а не частью метода. (Исключением, конечно же, являются захваченные переменные.)

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

30
ответ дан 24 November 2019 в 16:06
поделиться

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

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

1
ответ дан 24 November 2019 в 16:06
поделиться

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

Если вы думаете, что это будет большое логическое изменение, мне было бы интересно услышать, как это сделать.

class MyClass
{
    public static float MaxDepthInches = 3;

    private void PickNose()
    {
        if (CurrentFingerDepth < MyClass.MaxDepthInches)
        {
            CurrentFingerDepth++;
        }
    }
}
1
ответ дан 24 November 2019 в 16:06
поделиться

Потому что они облажались и упустили полезную функцию в угоду себе.

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

Конечно, C# чист и ориентирован на все. Вот почему они автоматически генерируют постоянные локали для лямбда-функций. Все это так сложно. Я чувствую себя таким тупым.

Статическая область видимости цикла полезна и важна во многих случаях.

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

126
ответ дан 24 November 2019 в 16:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: