powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / c# преобразование типов
44 сообщений из 44, показаны все 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
c# преобразование типов
    #38094892
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sphinx_mv,

Что такое "метод компилятора"?
Чем лучше мне будет лучше обратиться " к преобразованию родительского типа к дочернему в Вашем примере..." ?

Полагаешь , что я не различаю приведения вверх и вниз? Тогда ты - херовый ясновидящий
...
Рейтинг: 0 / 0
c# преобразование типов
    #38094893
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропили какой метод вызывается?Никакого. Но используется инструкция "castclass" которая пытается привести а к B .

А если сделать всё по правильному:
Код: c#
1.
            A a = (A) new B();

То вообще никакого преобразования не происходит. (точнее, происходит, но мы его не видим)
...
Рейтинг: 0 / 0
c# преобразование типов
    #38094899
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
enigmatic,

независимо от направления преобразования, компилятор C# порождает одну IL инструкцию castclass
...
Рейтинг: 0 / 0
c# преобразование типов
    #38094912
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,

Мой рефлектор показывает иное.
А именно:
Код: c#
1.
A a = (A) new B();

эквивалентно
Код: c#
1.
A a = new B();
...
Рейтинг: 0 / 0
c# преобразование типов
    #38094919
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И ildasm с ним солидарен.
Код: c#
1.
2.
3.
4.
        static void Main(string[] args) {
            A a = (A) new B();
            Console.Write(a);
        }


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
.method private hidebysig static void  Main(string[] args) cil managed
{
  .entrypoint
  // Code size       15 (0xf)
  .maxstack  1
  .locals init ([0] class testConversion.A a)
  IL_0000:  nop
  IL_0001:  newobj     instance void testConversion.B::.ctor()
  IL_0006:  stloc.0
  IL_0007:  ldloc.0
  IL_0008:  call       void [mscorlib]System.Console::Write(object)
  IL_000d:  nop
  IL_000e:  ret
} // end of method Program::Main
...
Рейтинг: 0 / 0
c# преобразование типов
    #38095022
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
enigmaticИзопропил,

Мой рефлектор показывает иное.
А именно:
Код: c#
1.
A a = (A) new B();

эквивалентно
Код: c#
1.
A a = new B();

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

Преобразование есть, оно неявное. Но инструкций преобразования (conv.*, castclass) нет.
...
Рейтинг: 0 / 0
c# преобразование типов
    #38095976
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
enigmaticsphinx_mv,

Преобразование есть, оно неявное.Да. Был не точен... :(
Имел в виду приведение типов (ака, "явное преобразование") - оно действительно не требуется...
...
Рейтинг: 0 / 0
c# преобразование типов
    #38096038
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилsphinx_mv,

Что такое "метод компилятора"?
Чем лучше мне будет лучше обратиться " к преобразованию родительского типа к дочернему в Вашем примере..." ?

Полагаешь , что я не различаю приведения вверх и вниз?Я полагаю, что лучше меня по поводу явных преобразования неинициализированной переменной экземпляра базового класса в производный класс в Вашем примере выскажется компилятор (вызвав соответствующий метод вывода текста в окно сообщений/на консоль) - и примерный текст сообщения ошибки времени компиляции я предоставил.
ИзопропилТогда ты - херовый ясновидящийА тут вобще нет необходимости быть каким-либо ясновидящим - просто читаем текст примера...
...
Рейтинг: 0 / 0
c# преобразование типов
    #38344662
megazoid007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно у знать почему у меня не прокатывает вот так:

Код: c#
1.
2.
DataRowView drvTemp = (DataRowView)bs.Current;
int temp = drvTemp["Код"];





а приходится записывать вот так:

Код: c#
1.
2.
DataRowView drvTemp = (DataRowView)bs.Current;
temp = Convert.ToInt32(drvTemp["Код"].ToString());





потому что пише что: Ошибка 1 Не удается неявно преобразовать тип "object" в "int". Существует явное преобразование (возможно, пропущено приведение типов)

хотя в примерах кабы пишут что вроде можно http://msdn.microsoft.com/ru-ru/library/0k5w061k.aspx ;
...
Рейтинг: 0 / 0
c# преобразование типов
    #38344683
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
потому что неявно object в int преобразовать нельзя.
...
Рейтинг: 0 / 0
c# преобразование типов
    #38344685
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
megazoid007хотя в примерах кабы пишут что вроде можно http://msdn.microsoft.com/ru-ru/library/0k5w061k.aspx ;
Ты про это что ли?
Код: c#
1.
rowView["CompanyName"] += " new value";


так " new value" ведь не int, а string!
В примерах конкатенацию делают. Неявное преобразование из object в string (т.е. сериализация объекта) и обратно - возможна.
...
Рейтинг: 0 / 0
c# преобразование типов
    #38344869
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles WeylandНеявное преобразование из object в string (т.е. сериализация объекта) и обратно - возможна.
Сериализацей называется преобразование объекта в поток байтов для хранения или передачи с возможностью последующего восстановления копии. К преобразованию типов это никак не относится.

object в string преобразуется если в нём хранится string или делается неявный вызов ToString(). В случае с rowView["CompanyName"] += " new value"; никакого преобразования нет. Компилятор всего лишь генерирует вызов метода String.Concat().

Преообразование string в object возможно т.к. существует и разрешено неявное преобразование от дочернего класса к базовому. А т.к. System.Object является базовым для всех типов в .NET, то к нему можно преобразовать что угодно.
...
Рейтинг: 0 / 0
c# преобразование типов
    #38345398
megazoid007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bazile, а если я сделаю что то вроде SqlDataAdapter.FillSchema, то упрощенный (второй) вариант присваивания может сработать ?
...
Рейтинг: 0 / 0
c# преобразование типов
    #38345549
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
megazoid007, не вижу связи между вызовом какого-то метода и последующим присваиванием.
...
Рейтинг: 0 / 0
c# преобразование типов
    #38345706
megazoid007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bazile, ну эта функция настраивает схему в соответствии с источником данных, т.е. среде уже будет известно что столбец drvTemp["Код"] типа int ну и наверно приведет к нужному типу при присвоении
...
Рейтинг: 0 / 0
c# преобразование типов
    #38345802
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
megazoid007, ты путаешь внутренние знания (времени исполнения) классов DataSet/DateView о типе данных в колонке с типом данных известных компилятору. Метод FillSchema будет, очевидно, выполнен во время работы программы. То есть после компиляции. Так что тип выражения drvTemp["Код"] как был object так и останется. Если тебе нужная строгая типизация на этапе компиляции, то используй типизированный DataSet или Entity Framework.
...
Рейтинг: 0 / 0
c# преобразование типов
    #38346010
megazoid007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bazile, спасибо бро все понятно
...
Рейтинг: 0 / 0
c# преобразование типов
    #38346061
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
приведение типов это разве преобразование?
приведение типа ни чего не преобразовывает, а вот Convert.*, .Parse() и .ToString() это преобразование
...
Рейтинг: 0 / 0
44 сообщений из 44, показаны все 2 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / c# преобразование типов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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