کلمه کلیدی long ، نوع داده ای صحیحی را مشخص می کند که مقادیر وابسته به اندازه و محدودیت نشان داده شده زیر را ذخیره می کند:
- نوع: long
- محدوده: از –9,223,372,036,854,775,808 تا 9,223,372,036,854,775,807
- اندازه: صحیح علامتدار 64 بیتی
- نوع دات نتی: System.Int64
لیترال ها:
شما می توانید متغیر long را مانند این مثال تعریف و مقداردهی اولیه کنید:
long long1 = 4294967296;
وقتی یک لیترال صحیح پسوندی نداشته باشد، نوعش اولین نوع از انواع زیر است که مقدار آن بتواند در آن قرار گیرد:
- int
- uint
- long
- ulong
در مثال قبل، این لیترال از نوع long است؛ به این دلیل که از محدوده uint تجاوز می کند.
همچنین شما می توانید پسوند L را بصورت زیر، با نوع long استفاده کنید:
long long2 = 4294967296L;
وقتی از پسوند L استفاده می کنید، نوع لیترال صحیح، بسته به اندازه آن، یا long و یا ulong اتخاذ می شود. در این نمونه به این دلیل که اندازه آن کمتر از نوع ulong است، نوع long برای آن انتخاب می شود.
یک استفاده عمومی از پسوند لیترال در فراخوانی متدهای بارگذاری مجدد شده (overloaded) می باشد. برای نمونه، متدهای Overload شده زیر را که از نوع های int و long استفاده می کنند را در نظر بگیرید:
public static void SampleMethod(int i) {} public static void SampleMethod(long l) {}
استفاده از پسوند L تضمین می کند که نوع درستی فراخوانی می شود. برای مثال:
SampleMethod(5); // Calling the method with the int parameter SampleMethod(5L); // Calling the method with the long parameter
شما می توانید از نوع long با بقیه نوع های عددی صحیح در یک عبارت، استفاده کنید؛ در چنین موردی کل عبارت از نوع long (یا از نوع bool در موارد عبارات بولین و رابطه ای) ارزیابی می شود. برای مثال عبارت زیر از نوع long ارزیابی می شود:
898L + 88
نکته:
شما همچنین می توانید از حرف کوچک "l" به عنوان پسوند استفاده کنید. هرچند که این کار باعث می شود کامپایلر یک اخطار تولید کند؛ زیرا حرف "l" براحتی با عدد "1" اشتباه می شود. برای تمیزی و وضوح کد، از "L" استفاده کنید.
تبدیلات:
تبدیل ضمنی از پیش تعریف شده برای نوع long به float ، double و یا decimal وجود دارد. درغیر اینصورت باید از قالبریزی استفاده شود. برای مثال، بیان زیر، بدون قالبریزی صریح، یک خطای کامپایل تولید خواهد کرد:
int x = 8L; // Error: no implicit conversion from long to int int x = (int)8L; // OK: explicit conversion to int
تبدیل ضمنی از پیش تعریف شده از نوع های sbyte ، byte ، short ، ushort ، int ،uint یا char به long موجود است.
دقت کنید که هیچ تبدیل ضمنی ای از نوع های ممیز-شناور به long وجود ندارد. برای نمونه، بیان زیر تا زمانی که از عملگر صریح قالبریزی استفاده نکنید، خطای کامپایل تولید می کند:
long x = 3.0; // Error: no implicit conversion from double long y = (long)3.0; // OK: explicit conversion