Опубликован: 01.11.2011 | Уровень: специалист | Доступ: платный
Лекция 2:

Синтаксические основы языка программирования C#

< Лекция 1 || Лекция 2 || Лекция 3 >
Аннотация: В лекции приводятся сведения о возможностях и областях применения языка программирования C#. Обсуждается сходство и различия с языком C++. Рассказывается о технологии .Net, управляемом коде, сборке мусора и среде разработки MS Visual Studio 2010. Приводится пример простого консольного приложения на C#. Обсуждаются типы (типы значений и ссылочные типы), переменные, перечисления, преобразования типов, обобщения, пространства имен. Рассматриваются потоки управления: if-else, while - do while, switch, for, foreach, break, continue, return и throw.

Дополнительные материалы к занятию можно скачать здесь.

Вложенные файлы: Presentation_2.pptx

Вложенные папки: Lecture2_1, Lecture2_2, Lecture2_3

Язык программирования C# является основным инструментам разработки приложений Windows Presentation Foundation, Silverlight и XNA. Он имеет Си-подобный синтаксис, то есть тело функций заключается в фигурные скобки, а после выражений ставится точка с запятой. Сравним способы объявления и инициализации переменных в С++ и в С#.

C++ C#
#include<iostream>
using namespace std;

void main()
{
int a;
a=5;
cout<<"\na = "<<a<<endl;
}
        
using System;

namespace Example
{
    class Program
    {
        static void Main()
        {
            double b;
            b = 3.14159;
            Console.WriteLine("b = " + b);
            Console.WriteLine("Нажмите любую кнопку!");
            Console.ReadKey();
        }
    }
}
        


Идентичным образом работают и операторы сравнения:

C++ C#
#include<iostream>
using namespace std;

void main()
{
	double a,b,c;
	a=3;
	b=7;
	if(a>b){c=a;} else {c=b;}
	cout<<"\nMaximal value is ... "<<c<<endl;
}
        
using System;
namespace Example
{
    class Program
    {
        static void Main()
        {
            double a, b, c;
            a = -8;
            b = 6;
            if (a > b) { c = a; } else { c = b; }
            Console.WriteLine("Максимальное из двух чисел ... " + c);
        }
    }
}
        


Вместе с тем, C# имеет много общего и с языком JavaScript.

Сравним работу с текстом.

C# JavaScript
using System;

namespace Example
{
    class Program
    {
        static void Main()
        {
            string a, b, c, d, str;
            a = "О сколько нам открытий чудных";
            b = "\nГотовят просвещенья дух";
            c = "\nИ опыт, сын ошибок трудных,";
            d = "\nИ гений, парадоксов друг";
            str = a + b + c + d;
            Console.WriteLine(str);
            Console.WriteLine("Нажмите любую кнопку!");
            Console.ReadKey();
        }
    }
}
        
<html>
    <script type="text/javascript">
        var a,b,c,d,str;
        a="Чтоб истину познать,"+"<br/>";
        b="Проникни в суть."+"<br/>";
        c="Вглубь всех вещей"+"<br/>";
        d="Старайся заглянуть";
        str=a+b+c+d;
        document.write(str);
    </script>
</html>
        


Во всех трех языках циклы организованы сходным образом:

C++ C#
#include<iostream>
using namespace std;

void main()
{
int i,n,sum;
n=10;
sum=0;

for(i=1;i<=n;i++)
{
	cout<<"\n"<<i;
	sum+=i;
}
	cout<<"\nSum of first "<<n<<" numbers is ... 
"<<sum<<endl;

}
        
using System;
namespace Example
{
    class Program
    {
        static void Main()
        {
            int i, n, sum;
            string str;
            n = 10;
            sum = 0;

            for (i = 1; i <= n; i++)
            {
                Console.WriteLine("" + i);
                sum += i;
            }
            str = "Сумма первых " + n + 
        " членов ряда равна ... "  + sum;

            Console.WriteLine(str);
            Console.WriteLine("Нажмите любую кнопку!");
            Console.ReadKey();
        }
    }
}
        


JavaScript
<html>
    <script type="text/javascript">
        var i,n,sum,str;
            sum=0;
            str="";
            n=10;
            for(i=1;i<=n;i++)
                {
                    str+=i+"<br>";
                    sum+=i;
                }
            str+="<br/>" + "Сумма первых " + n + 
        " членов ряда = " + sum;

            document.write(str);
    </script>
</html>
        

Сравним способы использования функций.

C++ C#
#include<iostream>
#include<math.h>

using namespace std;

void root(double a, double b, double c)
{
	double d, x1, x2;
	d=pow(b,2)-4*a*c;

if(d<0) {cout<<"\nThere are no real roots!"<<endl;}
else
	{
		x1=(-b-sqrt(d))/(2*a);
		x2=(-b+sqrt(d))/(2*a);
		cout<<"\nx1 = "<<x1<<"\nx2 = 
"<<x2<<endl;
	}
}

void main()
{
	void root(double a, double b, double c);
	double a,b,c;
	a=-8;
	b=3;
	c=11;
	root(a,b,c);
}
        
using System;

namespace Example
{
    class Program
    {
        static void root(double a, double b, double c)
        {
            double d, x1, x2;
            string str;
            d = System.Math.Pow(b, 2) - 4 * a * c;

            if (d < 0) { str = "Действительных корней нет!"; }
            else
            {
                x1 = (-b - System.Math.Sqrt(d)) / (2 * a);
                x2 = (-b + System.Math.Sqrt(d)) / (2 * a);
                str = "x1 = " + x1 + "\nx2 = " + x2;
            }
            Console.WriteLine(str);
        }

        static void Main()
        {
            	
	double a, b, c;
	a=3;
	b=-8;
	c=-2;

    root(a, b, c);
        
            Console.WriteLine("Нажмите любую кнопку!");
            Console.ReadKey();
        }
    }
}
        


JavaScript
<html>
<script type="text/javascript">

function root(a,b,c)
{
	var d,x1,x2;
        d = Math.pow(b, 2) - 4 * a * c;

        if (d < 0) { str = "Действительных корней нет!"; }
        else
            {
                x1 = (-b - Math.sqrt(d)) / (2 * a);
                x2 = (-b + Math.sqrt(d)) / (2 * a);
                str = "x1 = " + x1 + "<br/>" + "x2 = " + x2;
            }
        document.write(str);
}

var a,b,c;

a=-4;
b=9;
c=11;
root(a,b,c);

</script>
</html>
        

Работа с датой и временем

Сравним, как эта возможность реализуется в C# и на JavaScript.

JavaScript

<html>
<script type="text/javascript">
var myDate,Year,Month,Day,str;
myDate=new Date;
Year=myDate.getYear();
Month=myDate.getMonth(this)+1;
Day=myDate.getDay(this)-1;
str="Сегодня "+myDate+"<br/>"+Day+"-е число "+Month+"-го месяца "+Year+"-го года";
document.write(str);
</script>
</html>
        

Возможности работы с датой и временем в C# гораздо богаче. Приведем несколько примеров.

Пример 2.1. Знакомство с датой и временем

Создаем новое консольное приложение C#. Называем проект Lecture_2_1.

Наберите в окне кода следующую программу:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Lecture_2_1
{
    class Program
    {
        static void Main()
        {
            // Получаем дату и время для текущего момента,
            // адаптированного для местной временной зоны

            DateTime saveNow = DateTime.Now;
            string str;
            str = "Сегодня: " + saveNow;
            str += "\nТекущая дата: " + saveNow.Date;
            str += "\nТекущий год: " + saveNow.Year;
            str += "\nТекущий месяц: " + saveNow.Month;
            str += "\nТекущий день: " + saveNow.Day;
            str += "\nДень недели: " + saveNow.DayOfWeek;
            str += "\nДень года: " + saveNow.DayOfYear;
            str += "\nЧас: " + saveNow.Hour;
            str += "\nМинуты: " + saveNow.Minute;
            str += "\nСекунды: " + saveNow.Second;
            str += "\nМиллисекунды: " + saveNow.Millisecond;
            str += "\nВремя: " + saveNow.Kind;

            Console.WriteLine(str);
            Console.WriteLine("Нажмите любую кнопку!");
            Console.ReadKey();
        }
    }
}
        

Получаем следующий результат:


Пример 2.2. Определение количества секунд, прошедших за определенное время

Суть предлагаемой работы заключается в следующем. За начало отсчета функционирования системы ГЛОНАСС принято 0 часов 0 минут и 0 секунд 1-го января 1983 года. Найдем количество секунд, прошедших с этого момента по сегодняшний день.

Создаем новое консольное приложение C#. Называем проект Lecture_2_2.

Наберите в окне кода следующую программу:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Lecture_2_2
{
    class Program
    {
        static void Main(string[] args)
        {
            System.DateTime date1 = new System.DateTime(1983, 1, 1, 0, 0, 0);
            DateTime date2 = DateTime.Now;
            System.TimeSpan diff1 = date2.Subtract(date1);

            string str;
            str = "Первая дата: " + date1;
            str += "\nВторая дата: " + date2;
            str += "\nВторая дата - Первая дата: " + diff1;

            int mydays, myhours, myminutes, myseconds;
            mydays = diff1.Days;
            myhours = diff1.Hours;
            myminutes = diff1.Minutes;
            myseconds = diff1.Seconds;
            int totalSeconds;

            totalSeconds = myseconds + myminutes * 60 + myhours * 3600 + mydays * 86400;

            str += "\nДней: " + mydays + "\nЧасов: " + myhours + "\nМинут: " + myminutes + "\nСекунд: " + myseconds;
            str += "\nВсего секунд: " + totalSeconds;

            Console.WriteLine(str);
            Console.WriteLine("Нажмите любую кнопку!");
            Console.ReadKey();
        }
    }
}
        
Листинг .

Получаем следующий результат:


Пример 2.3. Определение интервалов повторяемости системы ГЛОНАСС

Система ГЛОНАСС возвращается в исходное состояние каждые 17 витков. Один виток спутники ГЛОНАСС совершают за 11 часов 15 минут и 44 секунды. За начало отсчета функционирования системы ГЛОНАСС принято 0 часов 0 минут и 0 секунд 1-го января 1983 года. Определим количество прошедших циклов системы ГЛОНАСС.

Создаем новое консольное приложение C#. Называем проект Lecture_2_3.

Наберите в окне кода следующую программу:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Lecture_2_3
{
    class Program
    {
        static void Main(string[] args)
        {
            System.DateTime date1 = new System.DateTime(1983, 1, 1, 0, 0, 0);
            DateTime date2 = DateTime.Now;
            System.TimeSpan diff1 = date2.Subtract(date1);

            string str;
            str = "Первая дата: " + date1;
            str += "\nВторая дата: " + date2;
            str += "\nВторая дата - Первая дата: " + diff1;

            int mydays, myhours, myminutes, myseconds;
            mydays = diff1.Days;
            myhours = diff1.Hours;
            myminutes = diff1.Minutes;
            myseconds = diff1.Seconds;
            int totalSeconds;

            totalSeconds = myseconds + myminutes * 60 + myhours * 3600 + mydays * 86400;

            str += "\nДней: " + mydays + "\nЧасов: " + myhours + "\nМинут: " + myminutes + "\nСекунд: " + myseconds;
            str += "\nВсего секунд: " + totalSeconds;


            //Интервал повторяемости трасс движения НКА и зон радиовидимости НКА
            //наземными средствами составляет 17 витков (7 суток 23 часа 27 минут 28 секунд).
            int tGLONASS;
            tGLONASS = 7 * 24 * 3600 + 23 * 3600 + 27 * 60 + 28;

            str += "\nИнтервал повторяемости ГЛОНАСС составляет : " + tGLONASS + " секунд";
            int n; //Количество интервалов повторяемости трасс движения НКА
            n = totalSeconds / tGLONASS;
            str += "\nСовершено интервалов повторяемости  ГЛОНАСС: " + n;
            int secondsLeft; //Прошло секунд с начала нового интервала повторяемости
            secondsLeft = totalSeconds - n * tGLONASS;
            str += "\nПрошло секунд с начала нового интервала повторяемости: " + secondsLeft;

            Console.WriteLine(str);
            Console.WriteLine("Нажмите любую кнопку!");
            Console.ReadKey();
        }
    }
}
        
Листинг .

Получаем следующий результат:


< Лекция 1 || Лекция 2 || Лекция 3 >
Игорь Белов
Игорь Белов
Россия, г. Ейск
Александр Гринёв
Александр Гринёв
Украина, Днепропетрвск, Шаг