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


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