28 Mart 2020 Cumartesi

checked Anahtar Kelimesi - Taşma (Overflow) Kontrolü İçin Kullanılır

Giriş
Açıklaması şöyle
The checked keyword is used to explicitly enable overflow checking for integral-type arithmetic operations and conversions.
Örnek
Count() metodu şöyle. Metodun baş tarafını kalabalık yapmasın diye sildim.
// System.Linq.Enumerable
using System.Collections;
using System.Collections.Generic;

public static int Count<TSource>(this IEnumerable<TSource> source)
{
  ...
  int num = 0;
  using (IEnumerator<TSource> enumerator = source.GetEnumerator())
  {
    while (enumerator.MoveNext())
    {
      num = checked(num + 1);
    }
    return num;
  }
}
Bu kodda neden checked kontrolü olduğunun açıklaması şöyle. Eğer veri yapısında 2 milyardan fazla nesne varsa int'e sığmayacağı yani overflow (taşma) olacağı için checked ile kullanılıyor.
Because it doesn't want to return a negative number in the (admittedly unlikely) event that there are more than 2-billion-odd items in the sequence - or a non-negative but just wrong number in the (even more unlikely) case that there are more than 4-billion-odd items in the sequence. checked will detect the overflow condition.
Örnek
Şu kod taşma olduğu için OverflowException fırlatır.
checked
{
  int maxValue = 2147483647;
  long longValue = (maxValue + 1);
  int intValue = (int)longValue;
}
Örnek
Şu kod taşma olduğu için OverflowException fırlatır.
checked {
  int a = int.MaxValue;
  int b = int.MaxValue;
  int c = a * b;    // kaboom
}
Diğer
Convert sınıfı taşmayı kendisi kontrol ediyor.
var convertedDouble = Convert.ToInt64(maxDouble);    //** OverflowException

Hiç yorum yok:

Yorum Gönder