Преобразования типов в C#

Что такое конверсии в C#?

Преобразование - это механизм преобразования значения одного типа в эквивалентное значение другого типа. Давайте рассмотрим ниже пример, чтобы лучше понять его.

1. var1 имеет тип short, 16-разрядное целое число со знаком, которое инициализировано на 5. var2 имеет тип sbyte, 8-разрядное целое число со знаком, которое инициализируется значением 10.

2. Затем значение var1 присваивается var2. Так как это два разных типа, значение var1 должно быть преобразовано в значение того же типа, что и var2, прежде чем выполнить назначение.

3. Если вы посмотрите на результат, значение var1 не изменится, а var2 будет иметь такое же значение, как var1.

Различные типы конверсий в C#

Мы обсудим различные типы конверсий в C#.

  1. Неявное преобразование
  2. Явное преобразование
  3. Пользовательское преобразование

Неявное преобразование:

  • Компилятор автоматически выполняет эти преобразования
  • При преобразовании из меньшего типа данных в более крупный тип, дополнительные наиболее значимые биты цели заполняются 0.
  • Никакие данные не будут потеряны в Implicit Conversion

Пример:

class Program
    {
       static void Main(string[] args)
        {
           int  a = 5;
            Console.WriteLine(a);
            //Неявное преобразование из a в b.
            double b = a;
            Console.WriteLine(b);
        }
    }

Вывод:

5
5

Явное преобразование:

  • Когда вы конвертируете из более короткого типа в более длинный тип, для более длинного типа легко сохранить все биты более короткого типа, но при преобразовании из более длинного типа в более короткий тип целевого типа может оказаться несовместимым с исходным значением без потери данных.
  • Это приводит к переполнению и потере данных

Пример:

 class Program
    {
       static void Main(string[] args)
        {
           double  a = 5;
            Console.WriteLine(a);
            // Неявное преобразование из a в b.
            int b = (int) a;
            Console.WriteLine(b);
        }
    }

Вывод:

5
5

В приведенном выше примере, когда мы попытаемся преобразовать double в int, нам нужно явно использовать, используя int else, мы получим ошибку.

Пользовательское преобразование:

  • вы также можете определить как неявные, так и явные преобразования для ваших собственных классов и структур.
  • Синтаксис одинаковый как для неявных, так и для явных объявлений преобразования, за исключением явных и явных ключевых слов.
  • Требуются как публичные, так и статические модификаторы

Пример:

class Person
    {
        public string Name;
        public int Age;
        public Person(string name, int age)
        {
            Name = name;
            Age = age;
        }
        public static implicit operator int(Person p) // Преобразование Person  в int.
        {
            return p.Age;
        }
        public static implicit operator Person(int i) // Преобразование int в Person.
        {
            return new Person("Tina", i);
        }
    }
   class Program
   {
       static void Main()
       {
           Person Person1 = new Person("Mike", 25);
          
           int age = Person1;
           Console.WriteLine("Person Info: {0}, {1}", Person1.Name, age);
      
           Person Person2 = 35;
           Console.WriteLine("Person Info: {0}, {1}", Person2.Name, Person2.Age);
       }
   }

Ограничения по пользовательскому преобразованию:

  • Вы можете определять только определенные пользователем преобразования для классов и структур.
  • Вы не можете переопределять стандартные неявные или явные преобразования.
  • Для типа источника S и целевого типа T справедливы следующие значения:
    - S и T должны быть разных типов.
    - S и T не могут быть связаны наследованием. То есть S не может быть выведено из T, а T не может быть выведено из S.
    - Ни S, ни T не могут быть интерфейсом или объектом типа.
    - Оператор преобразования должен быть членом либо S, либо T.
  • Вы не можете объявить две конверсии, одну неявную и другую явную, с одинаковыми исходными и целевыми типами.

Источник: http://www.csharpstar.com/type-conversion-csharp/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Adblock
detector