0.00
0 читателей, 25 топиков

Вывод через foreach с конца

Для вывода массива или структуры файла наоборот с помощью foreach, используем метод Revers. Данный метод отображает значения с конца.


foreach (var node in nodes.Reverse())
            {
                Console.WriteLine(node.InnerHtml);
                Console.WriteLine("---------------------------");
            }

Системные коллекции. Часть 1

Arraylist — позволяет хранить данные любого типа приводя их к базовому.

class ArrayManager{

public ArrayList list {get; set;}

}

ArrayManager manager = new ArrayManager();

//Обработка кнопки и взятие текста из текстбокса
private void button_click(){

manager.list.add(textbox1.text)
}


Не нужно использовать для базовых типов.

Вы знаете что программирование это довольно тяжкий труд, особенно обучение в этой среде и для вашего здоровья и хорошо самочувствия необходимо правильно распределять нагрузки и делать перерывы в учебе или той же работе. Многие люди уходят от компьютера по дальше, тем самым полностью отдыхая от монитора. Я хочу предложить отличный способ. Делайте перерывы на 1 час проводя его в отличной игре Майнкрафт. Скачать майнкрафт 1.7.4
На этом сайте вы можете скачать его бесплатной и без проблем!

Метода Equals — определяет равенство объектов.
public ArrayList List {get; set;}
User us = new User();
User us2 = new User();
List.Equals(us,us2);

Remove — удаление объекта из коллекции.
var test = List[1].Equals(us);
List.Remove(test);

IEnumerator enumerator = List.GetEnumerator();
while(enumerator.MoveNext()){

MessageBox.Show(((User)enumerator.Current).Name);

}
 var collection = new[] {"vasya","pupkin","25.10.1996"};


List.AddRange(collection); — Добавляет коллекцию элементов.

List.Insert(2, new User() {Name=«us»,Surname-«den»,}); — Вставляет элемент в заданное положение.

List.InsetRange(); — Вставляет в область указанный индекс.
List.RemoveAt(2); — принимает индекс элемента, который необходимо удалить.
List.RemoveRange(0,7); — принимает 2 индекса и удаляет все в пределах этих индексах.
List.Sort(Name); — сортирует массив.

Задание для Вас.
Создать класс управления ArrayList.
Реализовать методы — добавлении, удаление, добавление области, удалении области, сортировка по заданным параметра и сравнение.
Коллекция должна содержать покупателей и категорию потребляемой ими продукции.
Из коллекции можно получать категорию товара, которую купил покупатель или по категории определить покупателя.
Визуально мы имеем список товаров и категорий с картинками. Это все после добавления отображается в корзине покупателя. Желательно реализовать возможность сохранениях предыдущих покупок и вывод их в истории.

Очередь

Системная коллекция элементов Queue
Данный вид очереди реализует принцип FIFO.

Queueue = new Queue();
ue.Enqueue(new User()); — используется для помещения элементов в коллекцию.
ue.Dequeue(); — При помощи этого метода происходит фактическое удаление коллекции.
ue.Peek(); — Получить значение элемента без удаления его из коллекции можно при помощи этого метода.

Системная коллеция элементов Stack — реализует принцип стэка LIFO.
Stackstack = new Stack();
Для помещения элемента в коллекцию существует метод Push();
stack.Push(new User());
stack.Pop(); — При извлечении элементов при помощи этого метода происходит фактическое удаление его из
коллекции.
stack.Peek();

Системная таблица Hashtable хранит пары — ключ/значение.
Hashtable tHashtable = new Hashtable();
tHashtable.Add(«name»,«name»);
tHashtable.Add(new User(),«name»);
Доступ к элементам можно осуществлять по ключам.
Хранимая информация требует уникальности Hash кодов, что означает невозможность хранения одиннаковых значений.
Не рекомендуется использовать если размер коллекции будет меньше десяти элементов.

ListDictionary — более низкоуровневое и схоже на массивы.

HybridDictionary hybridDictionary = new HybridDictionary(); — Введет себя как ListDictionary с маленькими наборами
или как HashTable при работе с большим набором элементов. Рекомендуется к использованию в тех случаях, когда невозможно определить размер коллекции заранее.

SortedList list = new SortedList(); — Хранит пары — ключ/значение.

list.Add("fdsds","1");
list.Add("sdfsd","2");

foreach(DictionaryEntry list in list){
Console.WriteLine(lists.Value);
}

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

OrderedDictionary or = new OrderedDictionary(); — Хранит пары — ключ/значение.
Размещение элементов соответствует порядку их добавление в коллекцию, что позволяет автоматически сохранить
элементы в хронологическом порядке.

Немного отвлечемся от темы, кого интересуют свадебные аксессуары? Большой ассортимент по адекватным ценам!

BitArray bit = new BitArray(); — Системная коллекция прендназначена для работы с битовыми данными. При создании
требует длину коллекции и менять ее динамиечки потом невозможно. Для изменение размера необходимо явно
изменить значение lenght, которая в отличии от други является readonly полем.
bit.Lenght=100.

Данный вид списков используется чаще всего при работе с сетями и файлами при любом потоке данных.

BitVector32 bit = new BitVector32(); — предназначен для работы с единичным 32-ух битным числом.
Предназначен для работы с единичным 32-ух битным числом. Набор очень удобно использовать для создания битовых
масок.

StringCollection uStringCollection = new StringCollection {«vlad»}; — Имеет динамически изменяемый размер
и позволяет хранить только строковые значения.
Данный вид коллекции используется для хранения строк.

StringDictionary — Хранит пары — ключ/значение но с ограничением. Ключи и значения должны обязательно иметь
строковый тип.
StringDictionary usStringDictionary = new StringDictionary ();
usStringDictionary.Add();


NameValueCollection nameValueCollection = new NameValueCollection(); — Хранит пары ключ/значение, но основное преимущество в том что позволяет хранить множество ключей.
nameValueCollection.Add("Name","Name2");

Основным отличием этой коллекции от всех предыдущих является то, что она позволяет хранить несколько значений под одним ключом.
  • avatar
  • 0
  • 0

Garbage Collector

Сборщик мусора специальный механизм, который переодически освобождает память, удаляя объекты, которые не будут
востребованы.
1. Для доступа к ресурсам нам нужно выделить память для типа предоставляющий ресурс.

public class User{

public string Name{get; set;} static void Main(string[] args){

User us new User();
us.Name "text";

2. Инициализировать выделенную память, установив начальное состояние ресурсов.
3. Использовать ресурс, обращаясь к членам его типа.
4. Ликвидировать ресурс.
5. Освободить память.

Garbage collector полностью освобождает разработчика от необходимости следить за использованием и своевременным
освобождением памяти. Требует выделять память из управляемых куч.
После получения команды new User среда Сll 1. Подсчитывает кол-во байт, необходимых для размещения полей типа.
2. Прибавляет к полученному значению, кол-во байт необходимых для размещения системных полей объекта.
3. Если в управляемой куче достаточно места для объекта, ему выделяется память начиная с адреса, на который указывает наш указатель, а заменяемые им байты, обнуляются.
4. Вызывается конструктор типа и команда New возвращает адрес объекта и перемещается наш указатель.

Специально для моих подписчиков. В наше время частая проблема — поломка экрана. Многие входят в заблуждение, что на этом с телефоном надо расстаться, продать его на запчасти и начинать собирать на новый. Ошибочно! В наше время починка экрана телефона не такая сложная и дорогая услуга. Достаточно найти мастера и экран вашего телефона. Как раз на счет экрана, вы легко сможете найти его на новом сайте, просмотритевсе отзывы на mobilife.com.ua.

При вызове оператора New в области выделяемой под объект, может не хватить свободного адресного пространства.
Куча определяет объем недостающей памяти и добавляет его в наше адресное пространство. Если результирующее значение выходит за пределы доступного пространства, то происходит очистка кучи.
Сборщик мусора проверяет наличие в куче больше не используемых объектов, что бы освободить занятую ими память.

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

Рождаясь, объекты попадают в нулевое поколения.
Каждый раз как объект переживает сборку мусора, он попадает в следующие поколение в класс GC.
GC класс для управления сборкой мусора. Позволяет получать информацию о поколениях, а так же принудительно иницировать сбор мусора, кроме того позволяет отменять работу деструктора.

public class User{

public string Name{get; set;}

~User(){ static void Main(string[] args){

Console.WriteLine(GC.GetTotalMemory(false));
Console.ReadLine();


Поколения 0 объекты не проверялись сборщиком мусора.
Поколение 1 объекты пережили одну проверку сборщика мусора.
Поколение 2 объекты, которые пережили больше чем одну сборку мусора.


GC.GetTotalMemory(false) возвращает размер памяти в байтах, которую занимает объекты в управляемых кучах.
Он принимает параметр указывающий запускать или нет сборку мусора.
GC.MaxGeneration возвращает максимальное кол-во поколений поддерживаемое данной системой.
Gc.GetGeneration(объект) принимает объект и возвращает поколение, к которому относится данный объект.
Gc.Collect(2) дает указание сборщику мусора проверить объекты определенного поколения.
Gc.WaitForPendingFinalizers приостанавливает выполнение текущего потока, пока не будут отобраны все объекты
предусматривающие финализацию. Финализацией называется поддерживаемый Cll механизм, позволяющий объекту
выполнить корректную очистку прежде чем сборщик мусора освободит занятую им память.
Любой тип выполняющий функциюоболочки машинного ресурса, например файла сетевого соединения, сокета, мютекса должен поддерживать финализацию. Для этого в типе реализуют метод финализации.
Определив, что объект стал мусором, сборщик вызывает метод финализации объекта, его невозможно вызвать самостоятельно. Рекомендуется для очистки неуправляемых ресурсов, переопределение осуществляется путем создания
специального метода в теле класса.

Gc.CoolectionCount() возвращает числовое значение, сколько раз данная генерация (поколения) выжила при сборке
мусора.

using(){} используется для создания блока кода для объектов гарантировано будет вызван метод Dispose.
Объекты, которые создаются в блоке using, обязаны реализовать интерфейс IDisposable.
  • avatar
  • 0
  • 0

Считывание из файла


            StreamReader fs = new StreamReader(@"D:\BadWords2.txt", System.Text.Encoding.GetEncoding(1251));
            string s = "";
            while (s != null)
            {
                s = fs.ReadLine();
                Console.WriteLine(s);
            }
            Console.ReadLine();

Потоки

В данном пример консоль будет беспрерывно выводить последовательность — xyxyxy…

class ThreadTest 
{
  static void Main()
  {
    Thread t = new Thread(WriteY);
    t.Start();            // Выполнить WriteY в новом потоке
    while (true) 
      Console.Write("x"); // Все время печатать 'x'
  }
 
  static void WriteY() 
  {
    while (true) 
      Console.Write("y"); // Все время печатать 'y'
  }
}


Создание и запуск потоков

Для создания потоков используется конструктор класса Thread, принимающий в качестве параметра делегат типа ThreadStart, указывающий метод, который нужно выполнить. Делегат ThreadStart определяется так:

public delegate void ThreadStart();
Вызов метода Start начинает выполнение потока. Поток продолжается до выхода из исполняемого метода. Вот пример, использующий полный синтаксис C# для создания делегата ThreadStart:


class ThreadTest 
{
  static void Main() 
  {
    Thread t = new Thread(new ThreadStart(Go));
    t.Start();   // Выполнить Go() в новом потоке.
    Go();        // Одновременно запустить Go() в главном потоке.
  }


  static void Go() {
Console.WriteLine("hello!");
 }
  • avatar
  • 0
  • 0

Интерфейсы

Интерфейс — семантическая и синтаксическая конструкция в коде программы используемая для
специфицирования услуг предоставляемых классом или компонентом.
Интерфейс — стереотип являющийся чистого абстрактного класса, в котором запрещена
любая реализация.
Для имени интерфейса следует применять в качестве префикса букву i, для того что бы
программисты понимали что это интерфейс.Реализовывать методы нельзя в интерфейсе,
их можно только создавать и без спецификатора доступа.

interface Interface 1{

void Show();

}


Правила использования интерфейсов:

1.Невозможно создать экземпляр интерфейса.
2.Интерфейсы и члены интерфейсов являются абстрактными. Интерфейсы не имеют
реализации в C#.
3.Интерфейс может содержать только абстрактные члены, методы, свойства, события
или индексаторы.
4.Члены интерфеса автоматически являются открытыми, абстрактными и они не могут
иметь модификаторов доступа
5.Интерфейсы не могут содержать константы, поля, операторы, конструктор экземпляра,
деструкторы или вложеные типы.
6.Класс или структура, которые реализуют интерфейс должны реализовать члены этого
интерфейса, указанные при его создании.
7.Интерфейс может наследоваться от одного или нескольких базовых интерфейсов.
8.Базовый класс так же может реализовать члены интерфейса с помощью виртуальных членов.
В это случае производный класс можно изменить поведение интерфейса путем переопределения
методов интферйса.
9.Если класс реализует два интерфейса содержащий член с одной сигнатурой, то при реализации
этого члена в классе оба интерфейса будут использовать этот член для своей реализации.
10.Если члены двух интерфейсов с одиннаковой сигнатурой методов должны выполнять различные
действия при их реализации необходимо воспользоваться явной реализацией члена интерфейса — техника явного указания в имение члена, имени интерфейса.
Это достигается путем включения имя члена класс имени интерфейса с точкой.

Немного отвлечемся от темы, нашел сайт по раскрутке аккаунтов в инстаграме — http://instapromo.com.ua/. Не дорого и эффективно.

Основные преимущества интерфейсов:

1.Класс или структура может наследоваться от множества интерфейсов.
2.Если класс или структура реализует интерфейс, она получает только имена и сигнатуры
методов.
3.Интерфейсы определяют поведение экземпляров.
4.Интерфейсы определяют поведение экземпляров производных классов.

Создаем класс, который унаследуем от интерфейса:

interface IGace {

void Show();

}


class MyClass:IGace{

public void Show(){

}
}


Реализовать проигрыватель на интерфейсах.

Interface

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

namespace ConsoleApplication5
{
    public interface IPlaylable
    {

        void Start();
        void Stop();
        void Record();
        void Pause();
        void Play();

    }

}




Class

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

namespace ConsoleApplication5
{
    public class PlayerOne : IPlaylable
    {


        public void Start()
        {
            Console.WriteLine("Start");
        }
        public void Stop()
        {
            Console.WriteLine("Stop");
        }
        public void Record()
        {
            Console.WriteLine("Record");
        }
        public void Pause()
        {
            Console.WriteLine("Pause");
        }
        public void Play()
        {
            Console.WriteLine("Play");
        }

    }
}


Class2

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

namespace ConsoleApplication5
{
    public class VideoPlayer : IPlaylable
    {

        public void Start()
        {
            Console.WriteLine("VideoStart");
        }
        public void Stop()
        {
            Console.WriteLine("VideoStop");
        }
        public void Record()
        {
            Console.WriteLine("VideoRecord");
        }
        public void Pause()
        {
            Console.WriteLine("VideoPause");
        }
        public void Play()
        {
            Console.WriteLine("VideoPlay");
        }


    }
}


Menu

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

namespace ConsoleApplication5
{
    class Program
    {
        static void Main(string[] args)
        {
            IPlaylable temp = new PlayerOne();
            temp.Play();
            Console.ReadLine();
        }
    }
}

  • avatar
  • 0
  • 0

Пример с абстракционными калассами

Задание:
Сделать задание с оружием. 12 видов оружия, все оружие наследуется от абстрактного класса оружия.
У абстракт класса есть методы — название, вес, цвет, вид оружия, урон, цена.

Меню

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

namespace ConsoleApplication4
{
    class Program
    {
        static int Main(string[] args)
        {
            Menu();
            Console.ReadLine();
            return 0;
        }
       static int Menu()
        {
              string buff;
         int fl = 0;
            string name = "/";
            string color = "/";
            string weight = "/";
            string damage = "/";
            string value = "/";
            Console.WriteLine("1. Добавить оружие");
            Console.WriteLine("2. Выход");
            string inn = Console.ReadLine();
            int inn2 = 0;  
            try
            {
                inn2 = Convert.ToInt32(inn);
            }
            catch
            {
                Console.WriteLine("Введите цифрами");
                Console.ReadKey();
                Console.Clear();
                return Menu();
            }
            switch (inn2)
            {
                case 1:
                    {
                        inn2 = 0;
                        Console.WriteLine("Если не хотите заполнять поле с цветом или именем оружия, нажмите клавишу Enter");
                        Console.WriteLine("Введите название оружия");
                             name = Console.ReadLine();



                        Console.WriteLine("Введите цвет оружия");
                         color = Console.ReadLine();

                        Console.WriteLine("Введите урон оружия");
                         damage = Console.ReadLine();
                        try
                        {
                            inn2 = Convert.ToInt32(damage);
                        }
                        catch
                        {
                            Console.WriteLine("Ошибка");
                            Console.ReadKey();
                            Console.Clear();
                            return Menu();
                        }
                        Console.WriteLine("Введите вес оружия");
                         weight = Console.ReadLine();
                        try
                        {
                            inn2 = Convert.ToInt32(weight);
                        }
                        catch
                        {
                            Console.WriteLine("Ошибка");
                            Console.ReadKey();
                            Console.Clear();
                            return Menu();
                        }
                        Console.WriteLine("Введите стомиость оружия");
                         value = Console.ReadLine();
                        try
                        {
                            inn2 = Convert.ToInt32(value);
                        }
                        catch
                        {
                            Console.WriteLine("Ошибка");
                            Console.ReadKey();
                            Console.Clear();
                            return Menu();
                        }
                        Weapoon weapoon = new Weapoons(name, color, damage, weight, value);
                        weapoon.ShowName();
                        weapoon.ShowColor();
                        weapoon.ShowDamage();
                        weapoon.ShowWeight();
                        weapoon.ShowValue();
                        Console.ReadKey();
                        Console.Clear();
                        return Menu();
                        break;
                    }
                case 2:
                    {
                        Environment.Exit(0);
                        break;
                    }
                default:
                    {
                        Console.WriteLine("Введите необходимое число");
                        Console.ReadKey();
                        Console.Clear();
                        return Menu();
                    }
            }
            return 0;
        }
    }
}


Класс

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

namespace ConsoleApplication4
{
    public abstract class Weapoon
    {

        public abstract void ShowName();
        public abstract void ShowWeight();
        public abstract void ShowDamage();
        public abstract void ShowColor();
        public abstract void ShowValue();

    }

    public class Weapoons : Weapoon
    {
        public Weapoons(string name, string weight, string color, string damage, string value)
        {
            Name = name;
            Weight = weight;
            Color = color;
            Damage = damage;
            Value = value;

        }
        Weapoons()
        {

        }

        public string Name { get; set; }
        public string Weight{ get; set; }
        public string Color { get; set; }
        public string Damage { get; set; }
        public string Value { get; set; }

        public override void ShowName()
        {
            Console.WriteLine("Имя вашего оружия - "+Name);
        }
        public override void ShowWeight()
        {

            Console.WriteLine("Вес вашего оружия - " + Weight);
        }
        public override void ShowDamage()
        {

            Console.WriteLine("Урон вашего оружия - " + Damage);
        }
        public override void ShowColor()
        {

            Console.WriteLine("Цвет вашего оружия - " + Color);
        }
        public override void ShowValue()
        {

            Console.WriteLine("Стоимость вашего оружия - " + Value);
        }

       
        
    }
}

Создать класс User, содержащий информацию о пользователе.

Задание:
Используя Visual Studio, создайте проект по шаблону Console Application.
Требуется:
Создать класс User, содержащий информацию о пользователе (логин, имя, фамилия, возраст, дата заполнения анкеты). Поле дата заполнения анкеты должно быть проинициализировано только один раз (при создании экземпляра данного класса) без возможности его дальнейшего изменения.
Реализуйте вывод на экран информации о пользователе.
Меню:

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

namespace ConsoleApplication3
{
    class Program
    {
        static int Main(string[] args)
        {
            try
            {
                menu();
                Console.ReadKey();
            }
            catch
            {
                Console.WriteLine("Ошибка");
                Console.ReadKey();
                Console.Clear();
                Main(args);
            }
            return 0;
        }
        static int menu()
        {
            User user = new User();
            Console.WriteLine("1. Добавить пользователя");
            Console.WriteLine("2. Просмотреть пользователя");
            Console.WriteLine("3. Удалить пользователя");
            Console.WriteLine("4. Выход");
            string inn = Console.ReadLine();
            int inn2 = Convert.ToInt32(inn);
            switch (inn2)
            {
                case 1:
                    {
                        user.GetInfo();
                        Console.Clear();
                        return menu();
                        break;
                    }
                case 2:
                    {
                        user.ShowInfo();
                        Console.Clear();
                        return menu();
                        break;
                    }
                case 3:
                    {
                        user.DeleteUser();
                        Console.Clear();
                        return menu();
                        break;
                    }
                case 4:
                    {
                        Environment.Exit(0);
                        break;
                    }
                default:
                    {
                        Console.Clear();
                        return menu();
                        break;
                    }
            }
            return 0;
        }
    }
}


Класс:

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

namespace ConsoleApplication3
{
    class User
    {
	//Я ни где не сохраняю данные, поэтому для вывода использую static, что бы поля не обнулялись.
	//Если бы надо было сохранить я бы хранил информацию в фалах любого типа.
        static public string login { get; set; }
        static public string name { get; set; }
        static public string surname { get; set; }
        static public string age { get; set; }

        static public readonly DateTime curDate = DateTime.Now;


        public int GetInfo()
        {
            Console.WriteLine("Введите логин");
            login = Console.ReadLine();
            Console.WriteLine("Введите имя");
            name = Console.ReadLine();
            Console.WriteLine("Введите фамилию");
            surname = Console.ReadLine();
            Console.WriteLine("Введите возраст");
            age = Console.ReadLine();
            try
            {
                int age2 = Convert.ToInt32(age);
            }
            catch
            {
                Console.WriteLine("Возраст введите с помощью цифр");
                Console.ReadKey();
                return 0;
            }
            Console.WriteLine("Данные заполнены и сохранены, нажмите любую клавишу для продолжения..");
            Console.ReadKey();
            return 0;
        }
        public int ShowInfo()
        {
            Console.WriteLine("Логин пользователя - "+login);
            Console.WriteLine("Имя пользователя - "+name);
            Console.WriteLine("Фамилия пользователя - "+surname);
            Console.WriteLine("Возраст пользователя - "+age);
            Console.WriteLine("Дата создания анкеты - "+curDate);
            Console.ReadKey();
            return 0;
        }
        public int DeleteUser()
        {
            login = null;
            name = null;
            surname = null;
            age = null;
            Console.WriteLine("Пользователь удален");
            Console.ReadKey();
            return 0;
        }

    }
    
}
  • avatar
  • 0
  • 0