пятница, 28 января 2022 г.

Класс в си шарп общие и расширенные понятия и представление

  Что такое класс C#? 


C# программу можно представить как взаимосвязанные между собой объекты.
Класс В C# описывает объект.
Ключевое слово class используется для определения класса
Пример
  C#  
// описываем класс
class Book
{
     // члены класса
     protected string Name;
     protected int Price;

     // конструктор класса без параметров
     public Book()
     {
     }

     // конструктор класса с параметрами
     public Book(string name, int price)
     {
          Name = name;
          Price = price;
     }

     // методы класса
     public void SetName(string name)
     {
          // назначаем название книги
          Name = name;
     }

     public void SetPrice(int price)
     {
          // назначаем цену книги
          Price = price;
     }

     public void ShowInfo()
     {
          // показываем на экране информацию о книге
          Console.WriteLine("Название книги " + Name + ", цена " + Price);
     }
}
 Поля класса (содержат информацию)
Название
Тип данных
модификатор доступа
protected string Name
Могли выбрать любое английское название
string содержит текст
protected - это означает что мы не можем использовать за пределами класса
protected int Price
Могли выбрать любое английское название
int содержит число
protected означает что мы не можем использовать за пределами класса
 
 Конструкторы класса (инициализация полей класса при создании объекта)
public Book()
Имя конструктора всегда такое же как и название класса
() означает что нет параметров

На заметку! Конструктора класса не имеет возвращаемого типа
public означает что можем вызывать внутри класса и за пределами класса (в любом месте)
public Book(string name, int price)
Имя конструктора класса всегда такое же как и название класса
(string name, int price) означает что 2 параметра:

1-ый параметр с типом данных string

2-ой параметр с типом данных int

На заметку! Конструктора класса не имеет возвращаемого типа
public означает что можем вызывать внутри класса и за пределами класса (в любом месте)
 
 Методы класса (методы класса выполняют действие с данными)
public void SetPrice(int price)
Могли выбрать любое английское название
(int price) означает что
1-ый параметр с типом данных int

Возвращаемый тип void означает что метод не возвращает результата
public означает что можем вызывать внутри класса и за пределами класса (в любом месте)
public void ShowInfo()
Могли выбрать любое английское название
() означает что
у метода отсутствуют параметры

Возвращаемый тип void означает что метод не возвращает результата
public означает что можем вызывать внутри класса и за пределами класса (в любом месте)
Создаем объект класса
  C#  
Book book1 = new Book();
Чтобы создать объект класса Book нужно использовать выражение

new Book();

Оператор new выделяет память для класса Book.
И затем вызывается конструктор по умолчанию, который не принимает никаких параметров.

После выполнения new будет выделена память.
В этой памяти будут храниться все данные Book.
Переменная book1 получит ссылку на память.
Полный код
  C#     Создаем новое консольное приложение C# и пишем:
using System;

namespace ConsoleApplication1
{
     // описываем класс
     class Book
     {
          // поля класса
          protected string Name;
          protected int Price;

          // конструкторы класса
          public Book()
          {
          }

          public Book(string name, int price)
          {
               Name = name;
               Price = price;
          }

          // методы класса
          public void SetName(string name)
          {
               // назначаем название книги
               Name = name;
          }

          public void SetPrice(int price)
          {
               // назначаем цену книги
               Price = price;
          }

          public void ShowInfo()
          {
               // показываем на экране информацию о книге
               Console.WriteLine("Название книги " + Name + ", цена " + Price);
          }
     }

     // главный класс программы
     class Program
     {
          static void Main(string[] args)
          {
               // создаем объект класса Book
               Book book1 = new Book(); // вызывается конструктор класса Book()
               book1.SetName("Гарри Поттер"); // вызываем метод SetName
               book1.SetPrice(20); // вызываем метод SetPrice
               book1.ShowInfo(); // вызываем метод ShowInfo
               // на экране увидим "Название книги Гарри Поттер, цена 20"

               // создаем объект класса Book
               Book book2 = new Book("Три мушкетера", 30); // вызывается конструктор класса Book(string, int)
               book2.ShowInfo(); // вызываем метод ShowInfo
               // на экране увидим "Название книги Три мушкетера, цена 30"
          }
     }
}
В C# классы могут содержать
• поля класса (выше описали на примере)
• методы класса (выше описали на примере)
• константы
• свойства
• конструкторы класса
• деструкторы класса
• события
• операторы
• индексаторы
• вложенные типы
• делегаты
Модификаторы доступа для методов, свойств, полей для класса C#
Поля, методы, свойства в классе имеют модификаторы доступа.
Модификаторы доступа позволяют задать область видимости.
Область видимости это область в которой можно употреблять данную переменную или метод.
public
Публичный член класса.
Такой член класса доступен из любого места в коде
Такой член класса доступен для других сборок.

Пример 1 нет ошибок компиляции
  C#  
class Book
{
     // поле класса
     public string Name;

     // метод класса
     public string GetInfo()
     {
          return "Название книги " + Name; // получаем значение из поля класса
     }
}

class Program
{
     static void Main(string[] args)
     {
          // создаем объект класса
          Book book1 = new Book();

          // устанавливаем значение для объекта класса
          book1.Name = "aaa";

          // вызываем метод GetInfo
          string str1 = book1.GetInfo();
     }
}


Пример 2 (наследование) нет ошибок компиляции
  C#  
class Book
{
     // поле класса
     public string Name;

     // метод класса
     public string GetInfo()
     {
          return "Название книги " + Name; // получаем значение из поля класса
     }
}

class ShowBook : Book
{
     public void Show()
     {
          string info = GetInfo(); // вызываем метод GetInfo из базового класса Book
          Console.WriteLine(info);
     }
}

class Program
{
     static void Main(string[] args)
     {
          ShowBook book2 = new ShowBook();

          // устанавливаем значение для объекта класса
          book2.Name = "aaa";

          // вызываем метод GetInfo
          string str2 = book2.GetInfo();

          // вызываем метод Show
          book2.Show();
     }
}

protected
Такой член класса доступен в текущем классе и в производных классах.
Производные классы могут располагаться в других сборках.
Такой член класса НЕ ДОСТУПЕН для объекта класса.

Пример 1 (2 ошибки во время компиляции)
  C#  
class Book
{
     // поле класса
     protected string Name;

     // метод класса
     protected string GetInfo()
     {
          return "Название книги " + Name; // получаем значение из поля класса
     }
}

class Program
{
     static void Main(string[] args)
     {
          // создаем объект класса
          Book book1 = new Book();

          // устанавливаем значение для объекта класса
          book1.Name = "aaa"// Ошибка компиляции! Book.Name is inaccessible due to its protection level

          // вызываем метод GetInfo
          string str1 = book1.GetInfo(); // Ошибка компиляции! Book.GetInfo() is inaccessible due to its protection level
     }
}


Пример 2 (наследование) 3 ошибки во время компиляции
  C#  
class Book
{
     // поле класса
     protected string Name;

     // метод класса
     protected string GetInfo()
     {
          return "Название книги " + Name; // получаем значение из поля класса
     }
}

class ShowBook : Book
{
     protected void Show()
     {
          string info = GetInfo(); // вызываем метод GetInfo из базового класса Book
          Console.WriteLine(info);
     }
}

class Program
{
     static void Main(string[] args)
     {
          ShowBook book2 = new ShowBook();

          // устанавливаем значение для объекта класса
          book2.Name = "aaa"// Ошибка компиляции! Book.Name is inaccessible due to its protection level

          // вызываем метод GetInfo
          string str2 = book2.GetInfo(); // Ошибка компиляции! Book.GetInfo() is inaccessible due to its protection level

          // вызываем метод Show
          book2.Show(); // Ошибка компиляции! ShowBook.Show() is inaccessible due to its protection level
     }
}
private
Закрытый член класса.
Доступен только в том же классе.
Такой член класса НЕ ДОСТУПЕН для объекта класса.
Такой член класса НЕ ДОСТУПЕН для методов класса наследника.

Пример 1 (2 ошибки во время компиляции)
  C#  
class Book
{
     // поле класса
     private string Name;

     // метод класса
     private string GetInfo()
     {
          return "Название книги " + Name; // получаем значение из поля класса
     }
}

class Program
{
     static void Main(string[] args)
     {
          // создаем объект класса
          Book book1 = new Book();

          // устанавливаем значение для объекта класса
          book1.Name = "aaa"// Ошибка компиляции! Book.Name is inaccessible due to its protection level

          // вызываем метод GetInfo
          string str1 = book1.GetInfo(); // Ошибка компиляции! Book.GetInfo() is inaccessible due to its protection level
     }
}


Пример 2 (наследование) 4 ошибки во время компиляции
  C#  
class Book
{
     // поле класса
     private string Name;

     // метод класса
     private string GetInfo()
     {
          return "Название книги " + Name; // получаем значение из поля класса
     }
}

class ShowBook : Book
{
     private void Show()
     {
          string info = GetInfo(); // Ошибка компиляции! Book.GetInfo() is inaccessible due to its protection level
          Console.WriteLine(info);
     }
}

class Program
{
     static void Main(string[] args)
     {
          ShowBook book2 = new ShowBook();

          // устанавливаем значение для объекта класса
          book2.Name = "aaa"// Ошибка компиляции! Book.Name is inaccessible due to its protection level

          // вызываем метод GetInfo
          string str2 = book2.GetInfo(); // Ошибка компиляции! Book.GetInfo() is inaccessible due to its protection level

          // вызываем метод Show
          book2.Show(); // Ошибка компиляции! ShowBook.Show() is inaccessible due to its protection level
     }
}
internal
Тоже самое что public
но недоступен для других сборок.

Пример 1 (нет ошибок компиляции)
  C#  
class Book
{
     // поле класса
     internal string Name;

     // метод класса
     internal string GetInfo()
     {
          return "Название книги " + Name; // получаем значение из поля класса
     }
}

class Program
{
     static void Main(string[] args)
     {
          // создаем объект класса
          Book book1 = new Book();

          // устанавливаем значение для объекта класса
          book1.Name = "aaa";

          // вызываем метод GetInfo
          string str1 = book1.GetInfo();
     }
}


Пример 2 (наследование) нет ошибок компиляции
  C#  
class Book
{
     // поле класса
     internal string Name;

     // метод класса
     internal string GetInfo()
     {
          return "Название книги " + Name; // получаем значение из поля класса
     }
}

class ShowBook : Book
{
     internal void Show()
     {
          string info = GetInfo(); // вызываем метод GetInfo из базового класса Book
          Console.WriteLine(info);
     }
}

class Program
{
     static void Main(string[] args)
     {
          ShowBook book2 = new ShowBook();

          // устанавливаем значение для объекта класса
          book2.Name = "aaa";

          // вызываем метод GetInfo
          string str2 = book2.GetInfo();

          // вызываем метод Show у класса ShowBook
          book2.Show();
     }
}

protected internal
Совмещает функционал двух модификаторов.
Тоже самое что protected
но недоступен для других сборок.

  C#     Пример
class Book
{
     protected internal string Name;
     ...
}
private protected
Совмещает функционал двух модификаторов.
Тоже самое что private
но недоступен для других сборок.

  C#     Пример
class Book
{
     private protected string Name;
     ...
}
Если модификатор доступа отсутствует, по умолчанию будет присвоен private.

  C#     Пример
class Book
{
     string Name; // private
     ...
}
Модификаторы доступа класса В C#
Классы имеют модификаторы доступа.
Модификаторы доступа позволяют задать область видимости.
public
Общедоступный класс. Такой класс доступен из любого места в коде, а также из других программ и сборок.

  C#     Пример
public class Book
{
     ...
}
internal
Класс доступен из любого места кода в той же сборке, однако он недоступен для других программ и сборок.

  C#     Пример

internal class Book
{
     ...
}
Если модификатор доступа для класса отсутствует, по умолчанию будет присвоен internal.

  C#     Пример

class Book // internal
{
     ...
}
 
← Предыдущая тема
Обработка исключений в C#. Оператор try catch finally
 
Следующая тема →
Модификаторы доступа класса В C#. Модификаторы доступа для методов, свойств, полей В C#
 
 Ваши Отзывы ... 1 комментарий
НЛО
11 августа 2021 11:08
 
  C#  

class Program
{
      static void Main(string[] args)
      {
            Book book = new Book();
            book.SetName("Elon Mask");
            book.SetPrice(300);
            book.Info();
      }

}
class Book
{
      protected string Name;
      protected int Price;
      public Book()
      {

      }
      public Book(string name, int price)
      {
            Name = name;
            Price = price;
      }
      public void SetName(string name)
      {
            Name = name;
      }
      public void SetPrice(int price)
      {
            Price = price;
      }
      public void Info()
      {
            Console.WriteLine("Name is book: " + Name + "Price is Book: " + Price + "$");
      }
}
 

Комментариев нет:

Отправить комментарий

Паттерн 'Репозиторий' в ASP.NET

  Последнее обновление: 1.11.2015         Одним из наиболее часто используемых паттернов при работе с данными является паттерн 'Репозито...