powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / c# преобразование типов
25 сообщений из 44, страница 1 из 2
c# преобразование типов
    #38093782
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чем отличается запись
(int32)value
от
Convert.ToInt32(value)
?
...
Рейтинг: 0 / 0
c# преобразование типов
    #38093795
Sergey TSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
(int32)value – явное преобразование типа
Convert.ToInt32(value) – вызов метода
...
Рейтинг: 0 / 0
c# преобразование типов
    #38093816
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(int32)value - преобразует только из числовых типов
...
Рейтинг: 0 / 0
c# преобразование типов
    #38093823
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил(int32)value - преобразует только из числовых типов
Спасибо!
...
Рейтинг: 0 / 0
c# преобразование типов
    #38093826
Sergey TSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изопропил(int32)value - преобразует только из числовых типов

Не совсем верно. Можно перегрузить операторы преобразования и преобразовывать таким образом объекты.
А класс Convert предоставляет ряд статических перегруженных функций.
...
Рейтинг: 0 / 0
c# преобразование типов
    #38093839
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил(int32)value - преобразует только из числовых типов

Код: c#
1.
2.
object value = int.MaxValue;
int id = (int)value;
...
Рейтинг: 0 / 0
c# преобразование типов
    #38093850
Sergey TSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
  class Program
  {
    class MyClass
    {
      public static explicit operator int(MyClass obj)
      {
        return 777;
      }
    }

    static void Main(string[] args)
    {
      MyClass m = new MyClass();
      int i = (int)m;

      Console.WriteLine(i);
      Console.ReadKey();
    }
  }
}
...
Рейтинг: 0 / 0
c# преобразование типов
    #38093853
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles Weyland(int32)value?
в данном случае это "аппаратная" хрень, которая не жрёт ресурсы.
...
Рейтинг: 0 / 0
c# преобразование типов
    #38093900
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Charles WeylandИзопропил(int32)value - преобразует только из числовых типов
Спасибо!
И из объектов.
...
Рейтинг: 0 / 0
c# преобразование типов
    #38093976
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Charles Weylandпропущено...

Спасибо!
И из объектов.

и из разных типов
...
Рейтинг: 0 / 0
c# преобразование типов
    #38093981
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-erCharles Weyland(int32)value?
в данном случае это "аппаратная" хрень, которая не жрёт ресурсы.

жрёт
...
Рейтинг: 0 / 0
c# преобразование типов
    #38094005
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pationbeg-in-erпропущено...

в данном случае это "аппаратная" хрень, которая не жрёт ресурсы.

жрёт
но немного :)
...
Рейтинг: 0 / 0
c# преобразование типов
    #38094006
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pationжрёт
да не, всё, в рамках одно машинной инструкции. а Convert естественно несколька больше
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 float x = 10;
         movss       xmm0,dword ptr [00000088h] 
         movss       dword ptr [rsp+24h],xmm0 
 int z = (int)x;
         cvttss2si   eax,dword ptr [rsp+24h] 
         mov         dword ptr [rsp+28h],eax 
 int z1 = Convert.ToInt32(x);
         movss       xmm0,dword ptr [rsp+24h] 
         call        FFFFFFFFF8ABAF90 
         mov         dword ptr [rsp+2Ch],eax 
...
Рейтинг: 0 / 0
c# преобразование типов
    #38094009
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ
Код: c#
1.
2.
object value = int.MaxValue;
int id = (int)value;


а это подороже
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 object value = int.MaxValue;
         mov         dword ptr [rsp+3Ch],7FFFFFFFh 
         mov         rcx,7FEF879ED78h 
         lea         rdx,[rsp+3Ch] 
         call        FFFFFFFFF936CC00 
         mov         qword ptr [rsp+30h],rax 
 int id = (int)value;
         mov         rcx,7FEF879ED78h 
         mov         rdx,qword ptr [rsp+30h] 
         call        FFFFFFFFF92A8050 
         mov         eax,dword ptr [rax] 
         mov         dword ptr [rsp+38h],eax 
...
Рейтинг: 0 / 0
c# преобразование типов
    #38094012
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-erpationжрёт
да не, всё, в рамках одно машинной инструкции. а Convert естественно несколька больше
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 float x = 10;
         movss       xmm0,dword ptr [00000088h] 
         movss       dword ptr [rsp+24h],xmm0 
 int z = (int)x;
         cvttss2si   eax,dword ptr [rsp+24h] 
         mov         dword ptr [rsp+28h],eax 
 int z1 = Convert.ToInt32(x);
         movss       xmm0,dword ptr [rsp+24h] 
         call        FFFFFFFFF8ABAF90 
         mov         dword ptr [rsp+2Ch],eax 




Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
class EatResource
{
     int x;
     
     public static implicit operator int(EatResource r)
     {
         return (int)new EatResource{x=r.x+1};
     }
}
...
Рейтинг: 0 / 0
c# преобразование типов
    #38094023
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если рассматривать в виде IL кода, то можно видеть что кастование через скобки, компилируется в инструкции которые поддерживаются напрямую средой фреймворка. Я предполагаю, что скобочный стиль был введён для реализации таких инструкций, а языки которые не поддерживают или не реализуют специализированные операторы, могут использовать вызов методов из класса Convert.

Код: c#
1.
2.
3.
4.
5.
6.
private static void Main(string[] args)
{
    double dbl = 12.0;
    int v = (int)dbl;
    int v2 = Convert.ToInt32(dbl);
}


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
IL_000c: ldc.r8 12
IL_0015: stloc.0
IL_0016: ldloc.0
IL_0017: conv.i4  //Инструкция на "внутреннем уровне" для кастования
IL_0018: stloc.1
IL_0019: ldloc.0
IL_001a: call int32 [mscorlib]System.Convert::ToInt32(float64) //Вызов внешнего метода
IL_001f: stloc.2
...
Рейтинг: 0 / 0
c# преобразование типов
    #38094031
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pation
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
class EatResource
{
     int x;
     
     public static implicit operator int(EatResource r)
     {
         return (int)new EatResource{x=r.x+1};
     }
}


код не работает. как бэ переполнение стека.
но мысль ясна. можно хоть соединенние с БД уставновить и пароль запросить к томуже.
но по сути преобразование в int это ж всем известно - аппартно подерживаемая фича для встроенных типов.
...
Рейтинг: 0 / 0
c# преобразование типов
    #38094036
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-erно по сути преобразование в int это ж всем известно - аппартно подерживаемая фича для встроенных типов.
нет
...
Рейтинг: 0 / 0
c# преобразование типов
    #38094069
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pationbeg-in-erно по сути преобразование в int это ж всем известно - аппартно подерживаемая фича для встроенных типов.
нет
а команда для преобразования типов CVTTSS2SI об этом знает, что она не является поддерживаемой на аппаратном уровне , начиная с Пня-3?
...
Рейтинг: 0 / 0
c# преобразование типов
    #38094392
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(Int32)Value - приведение типа, в памяти есть ячейка на 4 байта, если её можно привести к числовому типу, получится Int32, если же там строка или какой то объект класса, то выйдет Exception
Convert.ToInt32 - это метод конвертирования с перегрузкой, он может и из строки сделать число и из других классов, в перегрузке все указаны.
...
Рейтинг: 0 / 0
c# преобразование типов
    #38094623
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-erpationпропущено...

нет
а команда для преобразования типов CVTTSS2SI об этом знает, что она не является поддерживаемой на аппаратном уровне , начиная с Пня-3?

C# язык высокого уровня и он ничего не знает о командах процессора и пнях
приведение типа - это вызов метода и не более того
...
Рейтинг: 0 / 0
c# преобразование типов
    #38094641
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pationC# язык высокого уровня и он ничего не знает о командах процессора и пнях
приведение типа - это вызов метода и не более того

приведение типов - самостоятельное понятие.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
    public class A
    {
    }

    public class B:A
    {
    }

 A a; 
 B b;
...
 b = (B)a;


и какой метод вызывается?
...
Рейтинг: 0 / 0
c# преобразование типов
    #38094785
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилpationC# язык высокого уровня и он ничего не знает о командах процессора и пнях
приведение типа - это вызов метода и не более того

приведение типов - самостоятельное понятие.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
    public class A
    {
    }

    public class B:A
    {
    }

 A a; 
 B b;
...
 b = (B)a;


и какой метод вызывается?Метод (компилятора?), выводящий текст ошибки "Cannot convert type 'A' to 'B'". Не?
...
Рейтинг: 0 / 0
c# преобразование типов
    #38094794
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sphinx_mvМетод (компилятора?)
а это что за кентавр?

Обсудим реализацию самого компилятора?
...
Рейтинг: 0 / 0
c# преобразование типов
    #38094808
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилsphinx_mvМетод (компилятора?)
а это что за кентавр?

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


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