Сейчас мы рассмотрим пример создания небольшого класса.
В нем мы постараемся рассмотреть работу как с созданием новых методов и переменных-членов класса, так и подходы к работе с классом, ведь новичкам программирования сначала бывает не понятен смысл применения классов.
Создадим новый класс, назовем его Man (человек).
Наш класс будет схематично описывать человека следующим образом:
Имя будет передаваться в класс, во время вызова конструктора класса. Возраст и состояние здоровья будут генерироваться в конструкторе автоматически — в дальнейшем они будут влиять на вывод текста в консоль, при вызове доступных пользователю методов.
После сгенерированного программой класса Program мы создадим свой класс, назвав его Man и снабдив его необходимыми свойствами и методами:
/*http://esate.ru, Anvi*/ using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ClassTesting < class Program < static void Main(string[] args) < >> public class Man < // конструктор класса (данная функция вызывается // при создании нового экземпляра класса public Man(string _name) < Name = _name; isLife = true; >// закрытые члены, которые нельзя изменить // извне класса // строка, содержащая имя private string Name; // беззнаковое целое число, содержащая возраст private uint Age; // беззнаковое целое число, отражающее уровень здоровья private uint Health; // булево, означающее жив ли данный человек private bool isLife; // заготовква функции «говорить» public void Talk() < >// заготовка функции «идти» public void Go() < >// функция, возвращающая показатель — жив ли данный человек. public bool IsAlive() < // возращаем значение, к которому мы не можем // обратиться напрямую из вне класса, // так как оно имеет статус private return isLife; >> >
Вот такая вот заготовка нашей программы. Как видите, мы добавили еще одну функцию, о которой забыли в схеме нашего класса IsAlive.
Создаем игру змейка на C#. Простые примеры программ на c#
Данная функция будет возвращать значение переменной isLife, к которой мы не можем получить доступ извне класса, так как она является закрытой (Private).
Теперь более тщательно займемся реализацией наших классов.
Во-первых, улучшим конструктор класса: в нем будут генерироваться состояния здоровья и возраст нашего человека случайным образом. Для этого мы будем использовать класс генерации случайных чисел.
Random в C#. Генерация случайного числа в C#
Хорошее знание языков программирования никогда не обходится без знания того, как выполняется генерация случайных чисел. Сейчас мы рассмотрим то, как выполняется генерация случайного числа в С#.
Для выполнения данной задачи сначала создадим новый экземпляр класса Random:
Random rnd = new Random();
Теперь для того чтобы получить случайное число, достаточно использовать созданный экземпляр класса, вызывая метод Next();
Age = rnd.Next();
При желании (а нам этого очень хочется), можно генерировать число в заданном диапазоне, указав начальное и конечное значение.
Уроки C# / Как сделать первое Windows приложение
Таким образом, модернизируем конструктор нашего класса, чтобы он смог генерировать каждому новому экземпляру случайные значения здоровья и возраста.
Теперь конструктор класса выглядит следующим образом:
/*http://esate.ru, Anvi*/ // конструктор класса (данная функция вызывается // при создании нового экземпляра класса public Man(string _name) < // получаем имя человека из входного параметра // конструктора класса Name = _name; // экземпляр жив isLife = true; // генерируем возраст от 15 до 50 Age = (uint)rnd.Next(15,51); // и здоровье, от 10 до 100% Health = (uint)rnd.Next(10, 101); >
uint перед экземпляром класса rnd означает, что значение случайного числа, которое вернет функция Next будет приведено к типу uint (unsigned – т.е. беззнаковое int). Просто функция rnd возвращает значение с типом int, и данное значение не может быть неявно преобразовано, поэтому необходимо сообщить компилятору о преобразовании.
После конструктора класса, добавим объявление нашего экземпляра класса Random:
/*http://esate.ru, Anvi*/ // экземпляр класса Random // для генерации случайных чисел private Random rnd = new Random();
Остается только модернизировать наши функции, предназначенные для перемещения и разговора.
Сначала рассмотрим функцию разговора. Начало кода функции будит таким:
/*http://esate.ru, Anvi*/ // заготовка функции «говорить» public void Talk() < // генерируем случайное число от 1 до 3 int random_talk = rnd.Next(1, 4); // объявляем переменную, в которой мы будем хранить // строку string tmp_str = «»;
Как видите, здесь мы объявляем переменную random_talk, и сразу при объявлении она получает значение – результат выполнения функции rnd.Next, в диапазоне от 1 до 3.
В зависимости от этого значения, при вызове функции Talk случайным образом будет происходить выбор, что же сейчас скажет наш объект.
Далее мы объявляем переменную, в которой будет храниться значение строки, которую мы сгенерируем.
Генерация строки будет выполняться с помощью оператора выбора switch:
/*http://esate.ru, Anvi*/ // в зависимости от случ значения random_talk switch (random_talk) < case 1: // если 1 — называем свое имя < // генерируем текст сообщения tmp_str = «Привет, меня зовут » + Name + «, рад познакомиться»; // завершаем оператор выбора break; >case 2: // возраст < // генерируем текст сообщения tmp_str = «Мне » + Age + «. А тебе?»; // завершаем оператор выбора break; >case 3: // говорим о своем здоровье < // в зависимости от параметра здоровья if (Health >50) tmp_str = «Да я здоров как бык!»; else tmp_str = «Со здоровьем у меня хреново, дожить бы до » + (Age + 10).ToString(); // завершаем оператор выбора break; > >
Как видно из кода, в зависимости от значения переменной random_talk выполняется ветвление кода и выбирается одна из веток для значения: random_talk = 1 (case 1), random_talk = 2 (case 2) или random_talk = 3 (case 3).
И, собственно, завершение функции:
/*http://esate.ru, Anvi*/ // выводим в консоль сгенерированное сообщение System.Console.WriteLine(tmp_str); >
Теперь рассмотрим код функции Go.
Здесь все проще: сначала мы определяем, жив ли объект, если нет, то мы сгенерируем строку с сообщением о том, что данный человек умер и не может идти.
RabotaDime/Examples-CSharp
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Switch branches/tags
Branches Tags
Could not load branches
Nothing to show
Could not load tags
Nothing to show
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Cancel Create
- Local
- Codespaces
HTTPS GitHub CLI
Use Git or checkout with SVN using the web URL.
Work fast with our official CLI. Learn more about the CLI.
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
Latest commit message
Commit time
README.md
Простой набор примеров C# кода. Проект для Visual Studio 2017.
Постепенно, я выложу больше тестовых примеров своих работ для разных языков / технологий. К сожалению, большая часть моего кода либо защищена авторскими правами или личной ответственностью перед моими заказчиками, либо морально устарела, чтобы выкладывать в открытый доступ.
About
Примеры C# (машина состояний, конвертер строк, базовая работа с векторами и пр.)
Источник: github.com
Задачи на C# с решениями
Основная функция любой задачи — применение на практике полученных знаний. Постоянная практика важна и нужна, как и обсуждение результатов. В этой статье вы найдете решения некоторых задач на языке программирования Си шарп. Будут представлены задачи разной степени сложности, что позволит:
— повторить операторы и базовые условные конструкции языка программирования Си шарп;
— вспомнить такие вещи, как целочисленная арифметика, работа с функциями, ввод и вывод данных, логические операции.
Помните, что каждая из задач может иметь и нестандартное решение, а научить находить такие решения — это тоже важная педагогическая функция практических заданий.
Но прежде чем приводить практические примеры, немного вспомним теорию и расскажем о том, как объявляются методы и функции в языке программирования Си шарп.
Объявление функций и методов
Методы (функции в Си шарп также называют методами) позволяют инкапсулировать поведение и функциональность в объекты, создаваемые в коде. Объявление осуществляется с помощью сигнатуры, состоящей из ряда составных частей:
- модификатор доступа — показывает, откуда метод можно вызвать;
- тип возвращаемого значения. Необходим для указания соответствующего типа возвращаемого значения. Если значение не возвращается, используется тип void;
- идентификатор (имени) метода — идентификатор нужен, чтобы иметь возможность вызывать функцию в коде;
- список аргументов (параметров). Это список параметров, разделяемых запятыми и передаваемых в метод.
Также перечислим модификаторы доступа:
- private — доступ возможен только из содержащего эту функцию класса либо структуры;
- public — доступ разрешен из любого фрагмента кода в приложении;
- protected — доступ есть как из содержащего класса, так и из производных классов;
- internal — доступ разрешен из файлов в рамках одной сборки;
- static — обозначает, что метод — это статический член класса, а не член экземпляра конкретного объекта.
Пример функции в языке программирования Си шарп:
Чтобы вернуть из метода значение, используют оператор return. Если же вместо возвращаемого типа будет ключевое слово void, то вообще не вернется никакое значение.
Вы можете определить функцию в том же самом классе, что и Main() либо же определить ее в каком-нибудь другом классе. Также следует понимать, что все методы в Си шарп являются статическими, а это значит, что разработчик может вызывать их, не создавая класс объекта.
И еще один момент: чтобы функции, которые описываются в одном классе, сделать видимыми в другом классе, их надо описать посредством модификатора доступа public. Если же они вызываются в том же самом классе, то модификатор доступа public не нужен.
Задача № 1
Необходимо написать консольную программу, где пользователь будет вводить с клавиатуры 2 числа. Числа будут сравниваться с последующим выводом в консоль результата этого сравнения (равны ли значения, а если нет, то какое число больше/меньше).
Задача № 2
Теперь несколько усложним ситуацию в создаваемой программе. Пусть пользователь имеет возможность ввести одно число, причем:
— когда значение больше пяти и одновременно с этим меньше десяти, выводится один текст с соответствующим сообщением;
— когда значение не попадает в указанный диапазон, программа его не узнает, выводя другой текст с соответствующим сообщением. Таким образом, алгоритм решения будет несколько отличаться:
Задача № 3
Далее решим задачу сложнее. Представим банк, в котором алгоритм начисления процента по вкладу зависит от суммы вклада. На вход будет подаваться число (сумма вклада). При значении меньше 100, будет начислено 5 %, если значение находится в диапазоне от ста до двухсот — 7 %, если больше — 10 %. Отработав, программа должна вывести общую сумму с начисленными процентами. Для решения этой задачи воспользуемся выражением Convert.ToDouble(Console.ReadLine()) , которое нам пригодится для получения вводимого с клавиатуры числа.
Задача № 4
Напоследок еще немного усложним алгоритм, расширив условия предыдущего примера. Пусть банк регулярно начисляет по всем вкладам не только положенные по договору проценты, но еще и бонусы. И пусть, к примеру, банк решит выполнить доначисление по всем клиентским вкладам в размере 15 единиц без учета суммы. Поменяем программу, отображенную выше, чтобы к итоговой сумме были добавлены еще и бонусы.
Как видите, все получилось!
Текст написан по материалам следующих источников:
- https://labs-org.ru/c-sharp5/;
- http://mycsharp.ru/post/13/2013_05_21_funkcii_v_si-sharp_operator_return.html;
- https://metanit.com/sharp/practice/1.1.php.
Источник: otus.ru