Основы языка С#. Типы данных C#. Преобразование встроенных типов

Страницы работы

Фрагмент текста работы

Основы языка С#

История

  • C# - это новый язык программирования от компании Microsoft. Входит в Visual Studio.NET.
  • Цель разработки - это создание компонентно-ориентированного языка для новой платформы .NET.
  • Создателем языка является сотрудник Microsoft Андреас Хейлсберг.

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

Первая программа на C#

using System; - подключение пространства имен namespace first { - новое пространство имен class Program { - класс Program static void Main(string[] args) - главная функция { Console.WriteLine(“HELLO, WORLD!!!"); } } }

Синтаксис языка С#

  • Правила образования идентификаторов такие же как и в С++
  • Комментарии
    • // текст
    • /* текст
      • текст
      • */
  • Литералы (константы)
  • В С# существует четыре типа литерал:
    • целочисленный литерал (8-й, 16-й и 10-й системе счисления);
    • вещественный литерал;
    • символьный литерал;
    • строковый литерал.

Типы данных C#

  • Типы принято разделять на:
    • Простые и сложные;
    • Встроенные и определяемые пользователем;
    • Статические и динамические.
  • В C# все типы подразделяются еще на две основные группы:
    • размерные (структурные) типы (value-based):
      • числовые типы;
      • перечисления;
      • структуры.
    • ссылочные типы (reference-based):
      • массивы;
      • строки;
      • классы.
  • Размерные типы сохраняют свое фактическое значение в стеке.
  • Ссылочные типы хранят в стеке лишь адрес объекта, а сам объект сохраняется в куче. Все ссылочные объекты создаются операцией new.
  • Кроме имеются еще:
    • Указатели — pointer.
    • Тип void.

Типы данных C#

Все встроенные типы C# однозначно отображаются, а фактически совпадают с системными типами каркаса .NET Framework, размещенными в пространстве имен System. В языке C# сглажено различие между типом и классом. Все типы — встроенные и пользовательские — одновременно являются классами, связанными отношением наследования. Родительским, базовым классом является класс Object.

Класс Object

  • bool Equals (object obj) - проверяет эквивалентность объектов;
  • System.Type GetType () - возвращает системный тип объекта;
  • string ToString () - возвращает строку, связанную с объектом.
  • int GetHashCode() – служит как хэш-функция в соответствующих алгоритмах поиска по ключу при хранении данных в хэш-таблицах .
  • Упаковка (boxing). Преобразование структурного типа в ссылочный.
    • short s = 25;
    • object objShort = s;
  • Распаковка (unboxing). Преобразование из ссылочного в структурный тип.
    • short anyShort = (short) objShort;
    • Исключение InvalidCastException

class Program { int x = 11; uint ux = 1111; float y = 5.5f; double dy = 5.55; string s = "Hello!"; object obj = new Object(); void WhoIsWho(string name, object any) { Console.WriteLine("type {0} is {1} , value is {2}", name, any.GetType(), any.ToString()); } public void test() { WhoIsWho("x",x); WhoIsWho("ux",ux); WhoIsWho("y",y); WhoIsWho("dy",dy); WhoIsWho("s",s); WhoIsWho("11 + 5.55 + 5.5f",11 + 5.55 + 5.5f); obj = 11 + 5.55 + 5.5f; WhoIsWho("obj",obj); } static void Main(string[] args) { Program o1 = new Program(); o1.test(); } }

Преобразование встроенных типов

  • public void Express() {
  • byte b1 =1, b2 =2, b3;
  • short sh1;
  • int in1;
  • //b3 = b1 + b2; - ошибка: результат типа int
  • b3 = (byte)(b1+b2);
  • //sh1 = b1 + b2; - ошибка: результат типа int
  • sh1 = (short)(b1+b2);
  • in1 = b1+ b2 + sh1;
  • Console.WriteLine("b3= " + b3 + " sh1= "+ sh1 +" in1= " + in1);
  • int myInt = int.MaxValue;
  • try { byte myByte = (byte)myInt; // не создает исключение
  • Console.WriteLine("The byte value is {0}.", myByte);
  • } catch (OverflowException) {
  • Console.WriteLine("Unable to convert {0} to a byte.", myInt);
  • }
  • int myInt = int.MaxValue;
  • try { byte myByte = checked ((byte) myInt); // приведет к исключению
  • Console.WriteLine("The byte value is {0}.", myByte);
  • } catch (OverflowException) {
  • Console.WriteLine("Unable to convert {0} to a byte.", myInt);
  • }

Преобразования строкового типа

public void FromStringTest() { string s, s1; uint ux; s ="Введите возраст "; Console.WriteLine(s); s1 = Console.ReadLine(); ux = Convert.ToUInt32(s1); WhoIsWho("Возраст: ",ux); Console.WriteLine("Введите зарплату "); double dy; dy = Convert.ToDouble(Console.ReadLine()); WhoIsWho("Зарплата: ",dy); } System.DateTime dat = Convert.ToDateTime("15.03.2003"); Console.WriteLine("Date = {0}", dat); Результат: Date = 15.03.2003 0:00:00

public void Parsing() { Console.WriteLine("Введите целое"); string strdata = Console.ReadLine(); int idata = int.Parse(strdata); Console.WriteLine("Введите число с дробной частью и порядком"); strdata = Console.ReadLine(); double ddata = double.Parse(strdata); Console.WriteLine("int data = {0}; double data = {1}",idata, ddata); }

Константы

  • Литеральные константы.
    • х = 100; - литеральная константа
  • Символические константы.
    • const тип идентификатор = значение;
    • const double pi = 3.1415926;
  • Перечисления.
    • [атрибуты][модификаторы] enum идентификатор
    • [:базовый тип] (список перечислений);
    • enum Sizes: uint { Small=1, Middle, Large = 10 };
  • Строковые константы
    • string strMessage = "Здравствуй Мир!";

Переменные

[<атрибуты>] [<модификаторы>] <тип> <идентификатор>; class Testing { string name; int x; double y; public void ScopeVar(int x) { //int x=0; - ошибка int y =77; string s = name; // поле класса доступно в методе if (s=="Точка1") { int u = 5; int v = u+y; x +=1; Console.WriteLine("y= {0}; u={1}; v={2}; x={3}", y,u,v,x); } else { int u= 7; int v= u+y; Console.WriteLine("y= {0}; u={1}; v={2}", y,u,v); } //Console.WriteLine("y= {0}; u={1}; v={2}",y,u,v); - Переменные уже не доступны //static int Count = 1; - Локальные переменные не могут быть статическими. int i; long sum =0; for(i=1; i<x; i++) { // float y = 7.7f; - ошибка: коллизия имен sum +=i; } } }

//переменные в выражениях должны быть инициализированы int an =0 ; for (int i= 0;i<5;i++) an =i+1; x+=an; z+=an; y = an; //массивы могут быть без инициализации for (int i= 0;i<3;i++) { ard[i] += i+1; ars[i] += i.ToString()+1; Console.WriteLine("ard[" +i + "]=" +ard[i] + "; ars[" +i + "]=" +ars[i]); } // нельзя использовать в логических выражениях переменные типа int int k; if(k) //Ошибка! // неявно типизированные переменные var myInt =0; var AnotherInt = myInt; var myString = “Hello”; var myData = myString;

Операции

Класс Math и его функции

public void MathFunctions(){ double a, b,t,t0,dt,y; string NameFunction; Console.WriteLine("Введите имя исследуемой функции a*F(b*t)" + " (sin, cos, tan, cotan

Похожие материалы

Информация о работе