to post messages and comments.

← All posts tagged C#

Книга «Язык программирования C#. Классика Computers Science.» 4-е изд. (Хейлсберг А., Торгерсен М., Вилтамут С., Голд П.) выглядит довольно странно и местами пугающе. На 48 странице задвигают за параметры–типы которые не совсем понятно для чего нужны и куда это прикладывать.
Определение класса может включать ряд параметров-типов. Для этого за именем класса указывают квадратные скобки, в которых содержится список имен параметров-типов. Параметры-типы затем могут использоваться в теле класса для определений элементов класса. В следующем примере параметрами-типами класса Pair являются TFirst и TSecond.
public class Pair<TFirst, TSecond>
{
public TFirst First;
public TSecond Second;
}
Класс, который объявлен с параметрами-типами, называется обобщенным (родовым, параметризованным) классом. Структура, интерфейс и делегат также могут быть обобщенными.
За оператор continue поясняют на 422 странице. Попалось на глаза вот такое:

Если для двух любых ссылочных-типов А и В существует неявное (раздел 6.1.6) или явное (раздел 6.2.4) ссылочное преобразование из А к В, то такое же ссылочное преобразование существует из массива типа A[R] к массиву типа B[R], где R — любой спецификатор-размерности (одинаковый для обоих массивов). Это отношение известно как ковариантность массива. Ковариантность массива, в частности, означает что значение массива типа A[R] может быть ссылкой на экземпляр массива типа B[R], при условии что существует неявное ссылочное преобразование из В к А.

Непонятно назначение модификатора readonly в C#. Написано что «readonly защищает место хранения поля от изменений, которые могли бы быть внесены помимо конструктора класса, но не защищает хранимое там значение.» и получается что переопределять нельзя, но можно изменять само зачение. Далее пример:
>public static readonly StringBuilder FirstBorn = new StringBuilder("Joe"); И написано что «Прямое изменение FirstBorn (вне конструктора) приводит к ошибке компиляции», но «Однако можно достичь нужного результата, модифицируя экземпляр StringBuilder»
>Names.FirstBorn.Remove(0,6).Append("Biff");

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

«понятен людям, пишущим на подобных языках» как–то обидно звучит.