Похожие презентации:
ЛК_ХХ_Преобразование и сравнение типов_(2) (1)
1. Преобразование и сравнение типов
12. Преобразование и сравнение типов
ПРЕОБРАЗОВАНИЕ ИЗ СТРОКИ2
3. Преобразование строки
Все примитивные типы имеют два метода, которыепозволяют преобразовать строку к данному типу. Это
методы Parse()и TryParse().
4. Преобразование строки
Метод Parse() в качестве параметра принимает строку ивозвращает объект текущего типа.
int a = int.Parse("10");
double b = double.Parse("23,56");
decimal c = decimal.Parse("12,45");
byte d = byte.Parse("4");
Console.WriteLine($"a={a} b={b} c={c}
d={d}");
5. Преобразование строки
Парсинг дробных чисел зависит от настроек текущейлокали (23,56 или 23.56).
Чтобы не зависеть от культурных различий мы можем
установить
четкий
формат
с
помощью
класса
NumberFormatInfo
и
его
свойства
NumberDecimalSeparator
6. Преобразование строки
IFormatProvider formatter =new NumberFormatInfo{NumberDecimalSeparator = "."};
double b = double.Parse("23.56", formatter);
7. Преобразование строки
Метод TryParse() пытается преобразовать строку ктипу и, если преобразование прошло успешно, то
возвращает true.
8. Преобразование строки
int parsedString;Console.WriteLine("Введите строку:");
string input = Console.ReadLine();
bool result = int.TryParse(input, out parsedString);
if (result == true)
Console.WriteLine(parsedString);
else
Console.WriteLine($"невозможно
преобразовать
\"{input}\" в int");
9. Преобразование строки
Класс Convert представляет еще один способ дляпреобразования значений. Для этого в нем определены
следующие статические методы:
ToBoolean(value)
ToByte(value)
ToChar(value)
ToDateTime(value)
ToDecimal(value)
ToDouble(value)
ToInt16(value)
ToInt32(value)
ToInt64(value)
ToSByte(value)
ToSingle(value)
ToUInt16(value)
ToUInt32(value)
ToUInt64(value)
10. Преобразование строки
int n = Convert.ToInt32("23");bool b = true;
double d = Convert.ToDouble(b);
11. Преобразование и сравнение типов
ПРЕОБРАЗОВАНИЕ В СТРОКУ11
12. Преобразование в строку
Все типы обладают методом ToString() (определен вбазовом классе Object)
Метод ToString() можно вызывать явно, но, если явный
вызов не указан, то он будет вызываться неявно, всякий
раз, когда требуется преобразование к строковому типу.
Console.WriteLine(24.5);
12
13. Преобразование в строку
public virtual string? ToString();13
14. Преобразование пользовательского типа в строку
Car car = new();Console.WriteLine(car.ToString());
14
15. Преобразование пользовательского типа в строку
class Car{
public override string ToString()
{
. . .
}
}
15
16. Cравнение типов
СРАВНЕНИЕ НА РАВЕНСТВО16
17. Сравнение на равенство
Оператор ==По умолчанию неперегруженный оператор == проверяет:
Для ссылочных типов - равенство ссылок, определяя,
указывают ли две ссылки на один и тот же объект
Строка имеет перегруженный оператор ==, который
сравнивает не ссылки, а содержимое строк
Для предопределённых типов-значений проверяет равенство
этих значений
Для типа record сравниваются значения всех полей и
автоматически реализуемых свойств.
17
18. Сравнение на равенство
Метод Equals(object)Если текущий экземпляр является ссылочным
типом, метод Equals(Object)
проверяет равенство
ссылок
Если
текущий
экземпляр
является
типом
значения, метод Equals(Object) проверяет равенство
значений (объекты должны быть одного типа).
18
19. Настройка сравнения на равенство
public virtual bool Equals (object? obj);Можно переопределить Object.Equals (при этом
также
нужно
переопределить
метод
Object.GetHashCode)
19
20. Релизация интерфейса IEquatable<T>
Релизация интерфейса IEquatable<T>class Car:IEquatable<Car>
{
public int Year { get; set; }
public override bool Equals(object obj)
{
return this.Equals(obj as Car);
}
public bool Equals(Car other)
{
if (other == null) return false;
return Year.Equals(other.Year);
}
public override int GetHashCode()
{
return Year.GetHashCode();
}
}
20
21. Cравнение типов
СРАВНЕНИЕ ДЛЯ ОПРЕДЕЛЕНИЯ ПОРЯДКА21
22. Cравнение типов
Длясортировки
интерфейс IComparable.
объектов
применяется
22
23. Cравнение типов
public interface IComparable<in T>{
int CompareTo(T? other);
}
23
24. Cравнение типов
Результат сравнения:<0 - текущий объект должен находиться перед объектом,
который передается в качестве параметра
=0 - оба объекта равны
>0 - текущий объект должен находиться после объекта,
передаваемого в качестве параметра
24
25. Cравнение типов
class Car:IEquatable<Car>, IComparable<Car>{
public int Year { get; set; }
public int CompareTo(Car other)
{
if (other == null)
throw new Exception("Объекты нельзя сравнивать");
return Year.CompareTo(other.Year);
}
. . .
}
25
26. Преобразование типов
ПЕРЕГРУЗКАБГУИР кафедра Информатики
И.И. ГЛАМАЗДИН
26
27. Преобразование типов
Если в переменную (параметр метода) одного типа нужнозаписать значение другого типа, то для этого потребуется
механизм, который называется преобразованием типов.
БГУИР кафедра Информатики
И.И. ГЛАМАЗДИН
27
28. Преобразование типов
Неявные преобразования.Специальный
синтаксис
не
требуется,
так
как
преобразование всегда завершается успешно и данные не
будут потеряны. Примеры включают преобразования из
меньших
в
большие
целочисленные
типы
и
преобразования из производных классов в базовые классы.
БГУИР кафедра Информатики
И.И. ГЛАМАЗДИН
28
29. Преобразование типов
Явные преобразования (приведения).Для явных преобразований требуется выражение
приведения. Приведение требуется, если в ходе
преобразования данные могут быть утрачены или
преобразование может завершиться сбоем по другим
причинам. Типичными примерами являются числовое
преобразование в тип с меньшей точностью или меньшим
диапазоном и преобразование экземпляра базового класса
в производный класс.
БГУИР кафедра Информатики
И.И. ГЛАМАЗДИН
29
30. Преобразование типов
Для преобразований пользовательского типа в C#предусмотрена специальная разновидность операторного
метода, называемая оператором преобразования.
Оператор преобразования преобразует объект исходного
класса в другой тип.
БГУИР кафедра Информатики
И.И. ГЛАМАЗДИН
30
31. Преобразование типов
Пользовательские преобразования не рассматриваютсяоператорами is и as.
БГУИР кафедра Информатики
И.И. ГЛАМАЗДИН
31
32. Преобразование типов
Для определения явного или неявного преобразованияиспользуются
ключевые
слова operator и implicit или explicit соответственно.
Тип, который определяет преобразование, должен быть
типом
источника
или
целевого
объекта
этого
преобразования.
БГУИР кафедра Информатики
И.И. ГЛАМАЗДИН
32
33. Преобразование типов
public static implicit operator decimal(Account obj)=>obj.Deposit;
public static explicit operator Account(decimal val)
=> new Account { Deposit=val};
БГУИР кафедра Информатики
И.И. ГЛАМАЗДИН
33
34.
var account = new Account { Deposit = 100 };account.PrintInfo();
decimal d = account;
Console.WriteLine($"Получено число {d}") ;
account = (Account)500;
account.PrintInfo();
БГУИР кафедра Информатики
И.И. ГЛАМАЗДИН
34
Программирование