• Добро пожаловать на сайт - Forumteam.digital !

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

    Группа в телеграме (подпишитесь, что бы не потерять нас) - ForumTeam Chat [Подписатся]
    Связь с администратором - @ftmadmin

17. Разбираем методы классов в C#.

Redman

<FORUMTEAM>
Команда форума
Регистрация
13.11.17
Сообщения
13.340
Реакции
8.377
Баллы
1.200
FTC
208¢
Методы классов.

Использование и создание методов в программе на С# во многом схоже на уже известный вам подход из С++. Рассмотрим это поподробней. В C# любой метод является методом какого-либо класса. Например:
Код:
using System;
class Man{
   public string name;
   public int age;
   public Man(string n,int a){
         name = n;
         age = a;   
   }
   public void Show(){
       Console.WriteLine("Имя = "+name+"\tВозраст = "+age);
   }
}
class Sample
{
    static void Main()
    {
        try{
            Man obj = new Man("Fire",56);
            obj.Show();
        }
        catch(Exception er){
          Console.WriteLine(er.Message);
        }
        Console.Read();
   
    }
}

В данном примере у нас есть класс Man с методом Show и конструктором. Обратите внимание возле Show стоит спецификатор доступа public. Если его не указать по умолчанию будет поставлен private и вызвать его из класса Sample не получится. Для возврата значений и выхода из метода также как и в С++ используется оператор return. Принцип использования демонстрируется в примере:
Код:
using System;
class SomeClass{
   public float x;
   public float y;
   public SomeClass(float a,float b){
         x = a;
         y = b;   
   }
   public float Summa(){
       return x+y;
   }
   public void Test(float t){
       if(t == 0){
               Console.WriteLine("Для деления был передан 0");
               return;
       }
       Console.WriteLine(" Результат = ",(x+y)/t);
   }

}
class Sample
{
    static void Main()
    {
        try{
            SomeClass obj =  new SomeClass(2,3);
            Console.WriteLine("Сумма равна = "+obj.Summa());
            obj.Test(0);
        }
        catch(Exception er){
          Console.WriteLine(er.Message);
        }
        Console.Read();
   
    }
}

Передача параметров

В C# есть два способа передачи параметров методу по значению, и по ссылке. В первом случае внутрь метода попадает не оригинальная переменная. а её копия, которая разрушается при выходе из метода не оказывая влияния на оригинальную переменную. При передаче методу значений обычных типов, таких как int, double и т.д. используется передача по значению. Следовательно, при изменение параметра, никакого влияния на оригинальную переменную не происходит. Например:
Код:
using System;
class SomeClass{
   public float x;
   public SomeClass(float a){
         x = a;
   }
   public void TryToSetTo99(float res){
       res = 99;
   }
   public float Mult(float res){
       return res*x;
   }
}
class Sample
{
    static void Main()
    {
        try{
            SomeClass obj =  new SomeClass(2);
            float test = 5;
            obj.TryToSetTo99(test);
            Console.WriteLine(test); // 5
            Console.WriteLine(obj.Mult(test)); // 10
        }
        catch(Exception er){
          Console.WriteLine(er.Message);
        }
        Console.Read();
   
    }
}

Легко заметить, что переменная test не изменила своё значение после передачи её в TryToSetTo99.Теперь рассмотрим второй способ передачи параметров - по ссылке. В этом случае передается не копия переданного параметра, а ссылка на оригинальный объект, что позволяет модифицировать оригинал. По ссылке всегда автоматически передаются объекты классов. Например:
Код:
using System;
class SomeClass{
   public int x;
   public int y;
}
class SomeClass2{
    public void Set(SomeClass obj){
         obj.x=1;
         obj.y=2;
    }
}
class Sample
{
    static void Main()
    {
        try{
            SomeClass obj =  new SomeClass();
            SomeClass2 obj2 =  new SomeClass2();

            obj.x = 8;
            obj.y = 9;
            obj2.Set(obj); // передаётся по ссылке
            Console.WriteLine(obj.x+" "+obj.y); // 1    2
        }
        catch(Exception er){
          Console.WriteLine(er.Message);
        }
        Console.Read();
   
    }
}

Как изменить значение для переменной типа int или double при передаче её внутрь метода будет показано в следующем разделе. В С#, как и в С++. можно перегружать методы. Правила при перегрузке такие же, как и в С++.

Статические методы
Статическим методом называется метод с модификатором static. Разница между обычным методом класса и таким состоит в том, что метод с static модификатором может быть вызван без создания какого-либо объекта класса. Например:
Код:
using System;
class Figure{
   public static void Draw(){
           Console.WriteLine("FigureDraw");
   }
}
class Sample
{
    static void Main()
    {
        try{
            Figure.Draw();
        }
        catch(Exception er){
          Console.WriteLine(er.Message);
        }
        Console.Read();
   
    }
}

Отличия static - методов от обычных:

  1. Методы с модификатором static не имеют ссылки this.
  2. Метод с модификатором static, может непосредственно( без указания имени объекта ) вызывать только другой статический метод.
  3. Метод с модификатором static имеет только прямой доступ к static - данным.
Например:
Код:
using System;
class Figure{
   public int a;
   public void Line(){
           Console.WriteLine("*************");
   }
   public static void Draw(){
           a = 78; // ОШИБКА !!!  a  не static - член
           Console.WriteLine("FigureDraw");
           Line(); //// ОШИБКА !!!  Line не static - метод
   }
   public static void Draw2(Figure t){
           t.Line(); // А так можно !!!
   }
}
class Sample
{
    static void Main()
    {
        try{
           Figure.Draw();
           Figure.Draw2();
        }
        catch(Exception er){
          Console.WriteLine(er.Message);
        }
        Console.Read();
   
    }
}
 
Сверху Снизу