в

Беларусь

Belarusian .NET User Group

Контакты

Для связи: info ( @ ) belarusdotnet.org

либо dotnetby ( @ ) gmail.com

Наши партнеры

Минский институт управления
 
ООО Альторос Девелопмент - компания-резидент Парка высоких технологий, которая специализируется на создании тиражных продуктов под заказ с использованием новейших технологий, включая .NET Framework 3.5 и Windows Mobile.
 
JetBrains UG Program Member

Этот Блог

Engler

C# 4.0 и параметры по умолчанию

Пользуюясь тем, что это первый пост в этом году, хочу всех поздравить уже 

с натупившим Новым Годом! Хотелось бы пожелать всем успехов, и реализации

своих целей в этом году!

  Ну а теперь, о техническом.

 

Сегодня, пример с нашей предыдущей  В этом примере, компилятор справедливо выдаст ошибку времени компиляции,говорящую о том, что отловлено переполнение.
using System;
namespace CSharp    
{

   
class Program
   
{

       
static void Main(string[] args)
       
{
          Int32 val
= Int32.MaxValue + 1;
       
}
  
}
}

НО теперь если попробовать перенести такой код, в значение аргумента по умолчанию,

то компилятор скомпилирует, и даже выдаст результат "-2147483648". :-)
using System;
namespace CSharpFeatures   
{

   
class Program
   
{

       
static void Main(string[] args)
       
{
          M
();
       
}

   
public static void M(int i = Int32.MaxValue + 1)
   
{
        Console
.WriteLine(i);
   
}
 
}
}

 

Опубликовано янв 18 2009, 10:04 от Engler
Теги :

Комментарии:

Пожалуйста, войдите с систему, используя свою учетную запись либо зарегистрируйтесь, если вы впервые на нашем сайте.
 

dr.gigabit сказал(а):

IL приведи плиз в студию в обоих случаях. У меня пока виртуалка недоступна. А то непонятно что это доказывает или опровергает :-)

21 января, 2009 в 4:29
 

Engler сказал(а):

Тоже пока под рукой нету.

Правда мне не совсем понятно, что ты там хочешь увидеть?

Пост контатирует факт, и ничего не призван доказать, или опровергнуть.

22 января, 2009 в 11:03
 

dr.gigabit сказал(а):

хм. мне просто обычно интересно _почему_ это происходит, а не просто то, что это происходит :-D

23 января, 2009 в 12:34
 

Engler сказал(а):

Добрался до виртуалки.

Вот IL код метода M

.method public hidebysig static void M([opt] int32 i) cil managed

{

   <B>.param [1] = int32(-2147483648)</B>

   .maxstack 8

   L_0000: nop

   L_0001: ldarg.0

   L_0002: call void [mscorlib]System.Console::WriteLine(int32)

   L_0007: nop

   L_0008: ret

}

Кстати, а вот и вызов метода в теле Main:

.method private hidebysig static void Main(string[] args) cil managed

{

   .entrypoint

   .maxstack 8

   L_0000: nop

<B>    L_0001: ldc.i4 -2147483648 </B>

   L_0006: call void CSharpFeatures.Program::M(int32)

   L_000b: nop

   L_000c: ret

}

23 января, 2009 в 3:04

Сейчас на сайте

Community Server (Commercial Edition)