Процесс создание библиотеки классов на языке C# с помощью Visual Studio:


Для начала нужно создать проект:
"Файл->Создать->Проект..."

Скриншот

http://i.imgur.com/wr0cO3A.jpg

Далее нужно выбрать тип.
У нас это "C#->Консольное приложение"

Скриншот

http://i.imgur.com/1iM9b5R.jpg

После чего нужно как то назвать проект и нажать ОК

Скриншот

http://i.imgur.com/SloOBPb.jpg

Проект создан.

Теперь нужно создать проект самой DLL.
Для этого нужно:


1) Нажать в окне "Обозреватель решений" по строке Решение "Ваше_название" правой кнопкой мыши.
2) В открывшемся окне "Добавить->Создать проект"
3) Делам все так же как и при создании первого проекта. Но меняем название и выбираем "Библиотека классов"
4) Нажимаем ОК
5) В созданном проекте переименуйте файл Class1.cs в ваше название у меня это Vector.cs

Скриншот

http://i.imgur.com/pqrS3Wq.jpg
http://i.imgur.com/ekSrIGe.jpg

Написание кода:


Это для библиотеки классов. (второго проекта)

Код:
using System; //Стандартная библиотека

namespace Vector //Пространство имен (по этому имени подключается библиотека)
{
    public enum vType
    {
        NULL,
        RANDOM,
    }
    //Для примере создал 2 класса.
    //Vector2 - Класс 2d вектора. Vector3 - тоже самое только для 3D мира
    public class Vector2 //Публичный (доступен всем) класс с именем Vector2
    {
        public float x { get; set; } //Публичная переменная типа float (Не целое число. К примеру: 5.41) c именем x
        public float y { get; set; } //Публичная переменная типа float (Не целое число. К примеру: 5.41) c именем y

        //Конструктор класса через который можно создать новый экземпляр класса. Принимает уже готовый класс. В этом случае вещь бесполезная.
        //Но если добавить оператор который позволяет сложить 2 класса и вернет новый класс Vector2 то как раз этот конструктор пригодится.
        public Vector2(Vector2 vector)
        {
            x = vector.x; //Берем переменную x из присланного экземпляра и пишем ее в переменную x нашего экземпляра 
            y = vector.y; //Берем переменную y из присланного экземпляра и пишем ее в переменную x нашего экземпляра 
        }

        //Еще один конструктор. Но этот уже позволяет задать точную позицию.
        public Vector2(float x, float y)
        {
            this.x = x; //Берем переменную x (this. означает что переменная будет браться не из функции а из экземпляра) и записываем туда полученное значение.
            this.y = y; //Берем переменную y (this. означает что переменная будет браться не из функции а из экземпляра) и записываем туда полученное значение.
        }
       
        //А тут уже интересно.
        //В данном конструкторе есть переменные которые уже заданы по умолчанию. Вот тут через enum (который в начале скрипта) можно указать тип. 
        //Либо не указывать нечего и тогда будут стандартные значения. minRandom и maxRandom позволяют задать от какого до какого значения нужно создать вектор.
        //Но они работают только если type равен vType.RANDOM
        public Vector2(vType type = vType.NULL, int minRandom = 0, int maxRandom = 5)
        {
            //switch почти тоже самое как if(p1 == p2){} но он быстрей и меняется только 1 значение так что юзаем его. type - полученная из конструктора переменная.
             switch (type)
            {
                case vType.NULL: // Если type равно vType.NULL то создаем вектор с координатами x=0, y=0.
                    x = 0;//Присвоение переменным значения 0
                    y = 0;
                    break;//Выход из конструкции switch (то есть код продолжит выполнение после закрывающей скобки)
                case vType.RANDOM://Ну а если type равен vType.RANDOM то...
                    Random r = new Random();//Создаем новый экземпляр класса Random (Для него и нужна библиотека System в первой строке скрипта)
                    x = r.Next(minRandom, maxRandom); // Присваиваем переменной x то значение которое вернет функция Next в классе Random который у нас присвоен переменной r
                    y = r.Next(minRandom, maxRandom); // Присваиваем переменной y то значение которое вернет функция Next в классе Random который у нас присвоен переменной r
                    break;
            }
        }

        //Так как хотелось бы узнать что у нас записано в классе создаем функцию ToString()
        //Тут маленький облом... Она уже существует и вернет название класса. Чтобы ее переопределить нужно дописать override.
        //Публичная функция ToString которая вернет string (то есть если написать string p = ToString(); это будет тоже самое что написать string p = "Текст";)
        //Только вместо "Текст" там будет значение переменных из класса.
        public override string ToString()
        {
            //return - заставляет вернуть значение. string.Format - форматирует строку там где написано {0} будет вставлена первая переменная аргументов
            //тут это x и т.д.
            return string.Format("{0} {1}", x, y);
        }
    }
    //Класс Vector3 все так же как и в Vector2 только есть еще z координата.
    public class Vector3
    {
        public float x { get; set; }
        public float y { get; set; }
        public float z { get; set; }

        public Vector3(Vector3 vector)
        {
            x = vector.x;
            y = vector.y;
            z = vector.z;
        }
        public Vector3(float x, float y, float z)
        {
            this.x = x;
            this.y = y;
            this.z = z;
        }
        public Vector3(vType type = vType.NULL, int minRandom = 0, int maxRandom = 5)
        {
            switch (type)
            {
                case vType.NULL:
                    x = 0;
                    y = 0;
                    z = 0;
                    break;
                case vType.RANDOM:
                    Random r = new Random();
                    x = r.Next(minRandom, maxRandom);
                    y = r.Next(minRandom, maxRandom);
                    z = r.Next(minRandom, maxRandom);
                    break;
            }
        }
        public override string ToString()
        {
            return string.Format("{0} {1} {2}", x, y, z);
        }
    }
}

Жмем правой кнопкой по проекту библиотеки (у меня это Vector) после чего по кнопке "Собрать"

Теперь как это использовать:


В первом проекте "Правой кнопкой по вкладке Ссылки->Добавить ссылку" и выбираем библиотеку (она в папке проекта библиотеки-bin-Debug)

Код для файла Program.cs (главный класс консольного приложения)

Код:
using System;
using Vector; //Подключаем библиотеку

namespace Loader
{
    class Program //Класс Program 
    {
        //Создаем экземпляр класса Vector3 через конструктор  public Vector3(vType type = vType.NULL, int minRandom = 0, int maxRandom = 5)
        //И указываем что это будет рандомный (случайный) вектор.
        public static Vector3 v3_1 = new Vector3(vType.RANDOM);

        //Создаем экземпляр класса Vector3 через конструктор  public Vector3(vType type = vType.NULL, int minRandom = 0, int maxRandom = 5)
        //Оставляем стандартную комбинацию параметров.
        public static Vector3 v3_2 = new Vector3();

        //Тоже самое только не Vector3 а Vector2.
        public static Vector2 v2_1 = new Vector2(vType.RANDOM);

        //Указываем в конструкторе точные координаты.
        public static Vector2 v2_2 = new Vector2(50, 10);
        static void Main(string[] args)//Главная функция программы.
        {
            //Выводим в консоль значение векторов v3_1 и v3_2. \n - перенос на новую строку
            //Как раз тут и пригодилась функция ToString()
            Console.WriteLine("v3_1: {0}\nv3_2: {1}", v3_1.ToString(), v3_2.ToString());
            Console.ReadKey();//Ждем нажатие любой кнопки

            //После нажатия кнопки
            //Выводим в консоль значение векторов v2_1 и v2_2. \n - перенос на новую строку
            Console.WriteLine("v2_1: {0}\nv2_2: {1}", v2_1.ToString(), v2_2.ToString());
            Console.ReadKey();//Ждем нажатие любой кнопки (после ее нажатия программа завершит свою роботу.)
        }
    }
}

После запуска программы (кнопка Пуск на панели инструментов) все как и заказывали.

Скриншот

http://i.imgur.com/olp1BOU.png

Всем удачи. Фыр, фыр :3

Отредактировано Jack_Savage (2017-03-23 14:26:39)