Kniga-Online.club
» » » » Интернет-журнал "Домашняя лаборатория", 2007 №9 - Журнал «Домашняя лаборатория»

Интернет-журнал "Домашняя лаборатория", 2007 №9 - Журнал «Домашняя лаборатория»

Читать бесплатно Интернет-журнал "Домашняя лаборатория", 2007 №9 - Журнал «Домашняя лаборатория». Жанр: Газеты и журналы / Сделай сам / Хобби и ремесла год 2004. Так же читаем полные версии (весь текст) онлайн без регистрации и SMS на сайте kniga-online.club или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Перейти на страницу:
возможным неявное преобразование массива с элементами класса S в массив с элементами класса T, необходимо выполнение следующих условий:

• классы S и T должны быть ссылочного типа;

• размерности массивов должны совпадать;

• должно существовать неявное преобразование элементов класса S в элементы класса T.

Заметьте, если S — это родительский класс, а T — его потомок, то для массивов одной размерности остальные условия выполняются. Вернемся теперь к примеру с классами Int [], String[] и Object []. Класс int не относится к ссылочным классам, и потому преобразования класса Int[] в Object [] не существует. Класс string является ссылочным классом и потомком класса Object, а потому существует неявное преобразование между классами String [] и Object [].

Правило для явного преобразования можно сформулировать, например, так. Если существует неявное преобразование массива с элементами класса S в массив с элементами класса T, то существует явное преобразование массива с элементами класса T в массив с элементами класса S.

Для демонстрации преобразований между массивами написана еще одна процедура печати. Вот ее текст:

public static void PrintArObj (string name,object[] A)

{

     Console.WriteLine(name);

     foreach (object item in A)

         Console.Write("t {0}", item);

     Console.WriteLine();

}//PrintArObj

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

public void TestMas()

{

     string[] winames = ("Т. Xoap", "H. Вирт", "Э. Дейкстра"};

     Arrs.PrintArObj("winames", winames);

     object[] cur = new object[5];

     cur = winames;

     Arrs.PrintArObj("cur", cur);

     winames = (string[])cur;

     Arrs.PrintArObj("winames", winames);

}//TestMas

Взгляните на результаты работы этой процедуры.

Рис. 12.6. Семантика присваивания и преобразования массивов

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

… В исходнике 13 лекция пропущена…

14. Строки С#. Классы String и StringBuilder

Строки С#. Класс String. Изменяемые и неизменяемые строковые классы. Классы Net Framework, расширяющие строковый тип. Класс StringBuilder.

Класс String

В предыдущей лекции мы говорили о символьном типе char и строках постоянной длины, задаваемых массивом символов. Основным типом при работе со строками является тип string, задающий строки переменной длины. Класс String в языке C# относится к ссылочным типам. Над строками — объектами этого класса — определен широкий набор операций, соответствующий современному представлению о том, как должен быть устроен строковый тип.

Объявление строк. Конструкторы класса string

Объекты класса String объявляются как все прочие объекты простых типов — с явной или отложенной инициализацией, с явным или неявным вызовом конструктора класса. Чаще всего, при объявлении строковой переменной конструктор явно не вызывается, а инициализация задается строковой константой. Но у класса Sring достаточно много конструкторов. Они позволяют сконструировать строку из:

• символа, повторенного заданное число раз;

• массива символов char[];

• части массива символов.

Некоторым конструкторам в качестве параметра инициализации можно передать строку, заданную типом char*. Но все это небезопасно, и подобные примеры приводиться и обсуждаться не будут. Приведу примеры объявления строк с вызовом разных конструкторов:

public void TestDeclStrings()

{

   //конструкторы string world = "Мир";

   string s1 = new string ("s1");

   //string s2 = new string ();

   string sssss = new string('s',5);

   char[] yes = "Yes".ToCharArray();

   string stryes = new string(yes);

   string strye = new string(yes,0,2);

   Console.WriteLine("world = {0}; sssss={1}; stryes={2};"+

         " strye= {3}", world, sssss, stryes, strye);

}

Объект world создан без явного вызова конструктора, а объекты sssss, stryes, strye созданы разными конструкторами класса String.

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

Операции над строками

Над строками определены следующие операции:

• присваивание (=);

• две операции проверки эквивалентности (==) и (!=);

• конкатенация или сцепление строк (+);

• взятие индекса ([]).

Начну с присваивания, имеющего важную особенность. Поскольку string — это ссылочный тип, то в результате присваивания создается ссылка на константную строку, хранимую в "куче". С одной и той же строковой константой в "куче" может быть связано несколько переменных строкового типа. Но эти переменные не являются псевдонимами — разными именами одного и того же объекта. Дело в том, что строковые константы в "куче" не изменяются (о неизменяемости строкового типа будем далее говорить подробно), поэтому когда одна из переменных получает новое значение, она связывается с новым константным объектом в "куче". Остальные переменные сохраняют свои связи. Для программиста это означает, что семантика присваивания строк аналогична семантике значимого присваивания.

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

Бинарная операция "+" сцепляет две строки, приписывая вторую строку к хвосту первой.

Возможность взятия индекса при работе со строками отражает тот приятный факт, что строку можно рассматривать как массив и получать без труда каждый ее символ. Каждый символ строки имеет тип char, доступный только для чтения, но не для записи.

Вот пример, в котором над строками выполняются данные операции:

public void TestOpers()

{

   //операции над строками string

   s1 ="АВС", s2 ="CDE";

   string s3 = s1+s2;

   bool b1= (s1==s2);

   char ch1 = s1 [0], ch2 = s2[0];

   Console.WriteLine("s1={0}, s2={1}, b1={2}," +

       "ch1={3}, ch2={4}", s1,s2,b1,chi,ch2);

   s2 = s1; 

   b1 = (s1!=s2);

   ch2 = s2 [0];

   Console.WriteLine("s1={0}, s2={1}, b1={2}," +

        "ch1={3 }, ch2={4 } ", s1,s2,b1,ch1,ch2);

   //Неизменяемые значения

   s1= "Zenon";

   //s1[0]='L';

}

Строковые константы

Без констант не обойтись. В C# существуют два вида строковых констант:

• обычные константы, которые представляют строку символов, заключенную в кавычки;

• @-константы, заданные обычной константой с предшествующим знаком @.

В обычных константах некоторые символы интерпретируются особым образом. Связано это прежде

Перейти на страницу:

Журнал «Домашняя лаборатория» читать все книги автора по порядку

Журнал «Домашняя лаборатория» - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки kniga-online.club.


Интернет-журнал "Домашняя лаборатория", 2007 №9 отзывы

Отзывы читателей о книге Интернет-журнал "Домашняя лаборатория", 2007 №9, автор: Журнал «Домашняя лаборатория». Читайте комментарии и мнения людей о произведении.


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор kniga-online.


Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*