powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Непонятки с перегрузкой операций преобразования типов
4 сообщений из 4, страница 1 из 1
Непонятки с перегрузкой операций преобразования типов
    #32427786
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я понял так: есть implicit (неявное преобразование) и explicit(явное преобразование). На практике были выявлены следующие ньюансы:

1. Нельзя одновременно обьявить и implicit и explicit методы для однотипного преобразования:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
 /* В таком виде откомпилить не удасться
AWindow.cs(29,17): error CS0557: Duplicate user-defined conversion in
 class 'AWindow.ListBox' AWindow.cs(22,17): (Location of symbol related to
 previous error)
*/ 

  public static implicit operator ListBox(int theInt)
  {
   ListBox lb = new ListBox();
   lb.cntLine = theInt;
   return lb;
  }

  public static explicit operator ListBox(int theInt)
  {
   ListBox lb = new ListBox();
   lb.cntLine = theInt;
   return lb;
  }

2. Но п.1 - не проблема, так наличие только скажем implicit-преобразования даёт возможность и explicit тоже:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
 /*
 Код компилится и работает.
*/ 

public class AWindow
{
 //private Button v_ListWindow;

 public AWindow()
 {
  ListBox lb1 = new ListBox();
  ListBox lb2 = new ListBox();
  ListBox lb3 =  lb1 + lb2 ;
  lb3.Sort();
  int i1 =  1970 ;
   /* неявное */ 
  ListBox lb4 = i1;
  lb4.Sort();
   /* Явное */ 
  ListBox lb5 = (ListBox)i1;
  lb5.Sort();
 }


То, что так и должно быть,я думаю вы согласитесь - момент спорный.
А в книге про это ненаписано.
...
Рейтинг: 0 / 0
Непонятки с перегрузкой операций преобразования типов
    #32427815
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще хотелось бы уточнить. Автор пишет, что ключевое слово implicit применяется, когда преобразование типа гарантировано пройдёт без потери информации. В противном случае следует указать excplicit.

Исходя из моего первого поста, абсолютно непонятно, как я могу реализовать логику преобразования и для imp и exp, если нет возможности создать одновременно.

И собственно чем (кем) определяется, что преобразование произойдёт без потери или нет? То есть разработчик просто должен исходить из того что есть такое соглашение?
...
Рейтинг: 0 / 0
Непонятки с перегрузкой операций преобразования типов
    #32427854
полиглот
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А слово 'ньюансы', наверное, английского происхождения? От словосочетания new once ;))
...
Рейтинг: 0 / 0
Непонятки с перегрузкой операций преобразования типов
    #32428532
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО. Разработчик и должен гарантировать "непотерю" данных при перегрузке.
Т.е. всему свое место. Если у тебя строка 001 преобразуется в int 1, это потеря или нет? В зависимостиот ситуации. Думаю да. Эти 00 ведь тоже данные, которые могут быть где-либо, как-либо, использованы.

Magnus
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Непонятки с перегрузкой операций преобразования типов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]