آموزش ثابت ها (کلیدواژه const) در سی شارپ به زبان ساده

رتبه: 0 ار 0 رای sssss
ثابت هادر سی شارپ
نویسنده: میلاد حیدری زمان مطالعه 6 دقیقه
Banner Image

تا کنون بحث زیادی درباره متغیرها انجام داده ایم و نیز نحوه نام گذاری آنها را بررسی کرده ایم؛ متغیرها همیشه می توانند تغییر کنند. در نقطه مقابل متغیرها؛ ثابت ها قرار دارند که در سی شارپ با کلید واژه const معرفی می شوند. زمانی که یک ثابت اعلام می شود؛ باید سریعاً یک مقداری به آن اختصاص بدهیم و سپس، هیچ تغییری را نمی توان در مقدار آن ایجاد کرد. استفاده از ثابت ها هنگامی به کارتان می آید که می خواهید مقداری را در برنامه تعریف کنید که تا لحظه آخر تغییر نکند، و مطمئن شوید که به صورت تصادفی هم با کد نویسی تان تحت تأثیر قرار نمی گیرد و تغییر نمی کند.

شما بسیاری از ثابت ها را در خود چارچوب، برای مثال در کلاس Math (ریاضیات) پیدا خواهید کرد؛ که در آن یک ثابت برای PI تعریف شده است:

Console.WriteLine(Math.PI);

اما البته؛ قسمت جالب ماجرا آن است که بخواهیم ثابت های خودمان را اعلام کنیم. یک ثابت را مانند زیر می توان در دامنه یک متد تعریف کرد:

static void Main(string[] args)
{
const int TheAnswerToLife = 42;
Console.WriteLine(“The answer to life, the universe and everything: ” +  TheAnswerToLife);
}

با این حال؛ اغلب ثابت ها در سطح کلاس تعریف می شود؛ بنابراین؛ بر اساس کنترل سطح دسترسی (visibility) می توان از تمامی متدهای کلاس؛ حتی از خارج کلاس به آن ثابت ها دسترسی پیدا کرد (البته می دانید که تغییر نمی کنند). یک ثابت مانند عضو استاتیک کلاس رفتار می کند؛ به این معنا که شما می توانید بدون نمونه سازی کلاس، به آنها دست پیدا کنید. با به خاطر داشتن این نکات، بیایید مثالی را بررسی کنیم که در آن دو ثابت تعریف شده است- یک ثابت خصوصی (private) و یک ثابت عمومی (public) .

using System;

namespace Constants
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(“The fake answer to life: ” + SomeClass.TheFakeAnswerToLife);
Console.WriteLine(“The real answer to life: ” +  SomeClass.GetAnswer());
}
}

class SomeClass
{
private const int TheAnswerToLife = 42;
public const int TheFakeAnswerToLife = 43;

public static int GetAnswer()
{
return TheAnswerToLife;
}
}
}

توجه کنید که چگونه یک کلاس را با دو ثابت تعریف کرده ایم (SomeClass). اولین ثابت خصوصی است، بنابراین فقط از کلاس خود آن ثابت می توان به آن دسترسی داشت؛ اما ثابت دیگر، عمومی است. بنابراین، در کدنویسی برنامه مان؛ به هردو ثابت به صورتی متفاوت دسترسی خواهیم داشت- اولی به صورت مستقیم؛ زیرا پاسخ نادرست به طور عمومی در دسترس است و دومی با کمک متد ()GetAnswer به دست می آید.

کدام نوع از آیتم ها را می توان به عنوان یک ثابت استفاده کرد؟

از آنجایی که ثابت ها را باید فوراً اعلام کرد و نمی توان بعداً آنها را تغییر داد؛ مقداری که به ثابت تخصیص می دهید باید یک عبارت ثابت باشد و کامپایلر باید بتواند مقدار را در زمان کامپایل ارزیابی نماید. این بدان معناست که اعداد، مقادیر بولی و رشته ها را می توان به عنوان ثابت به کار برد؛ در حالی که اشیاء DateTime را نمی توان به عنوان ثابت به کار گرفت.

از آنجایی که کامپایلر باید به سرعت مقدار ثابت را بداند؛ به این ترتیب زمانی که می خواهید تنظیمات مقادیر را انجام دهید؛ محدودیت هایی وجود دارد. برای نمونه، مثال کاملی در ادامه آورده شده است که نشان می دهد شما چه می توانید بکنید:

const int a = 10;
const float b = a * 2.5f;

const string s1 = “Hello, world!”;
const string s2 = s1 + ” How are you?”;

از سوی دیگر؛ شما نمی توانید از نتیجه فراخوانی متد یا اعضای غیر ثابت کلاس استفاده کنید؛ زیرا اینها عبارت های ثابتی نیستند. در ادامه دو مثال از آنچه نمی توانید انجام دهید آورده ایم:

// NOT possible:
const int a = Math.Cos(4) * 2;
// Possible:
const string s1 = “Hello, world!”;
// NOT possible:
const string s2 = s1.Substring(0, 6) + ” Universe”;

آنچه که انتظار می رود کامپایلر هنگام رسیدن به کد شما درک بکند؛ محل تفاوت است. به عنوان مثال، اعداد، رشته ها و ثابت های دیگر به درستی توسط کامپایلر دریافت نمی شود.

یک جایگزین برای ثابت ها: فیلد فقط خواندنی

اگر به دنبال نسخه ای هستید که محدودیت کمتری نسبت به کلاس ثابت ها داشته باشد؛ ممکن است بخواهید نگاهی به کلیدواژه readonly داشته باشید؛ البته در سطح متد در دسترس نیست؛ اما می توانید از سطح کلاس ها از این کلید واژه استفاده کنید تا یک فیلد را تعریف نمایید که تنها در طول اعلام کردن یا اجرای یکی از متدهای سازنده ی کلاس؛ می تواند اصلاح بشود. بنابراین؛ به محض این که شیء برای استفاده در دسترس قرار می گیرد؛ فیلد فقط خواندنی همان مقدار را خواهد داشت که دیگر توسط کاربر قابل تغییر نیست. بیاید یکی از آنها را امتحان کنیم:

class SomeClass
{
private readonly DateTime rightNow;
public readonly DateTime later = DateTime.Now.AddHours(2);

public SomeClass()
{
this.rightNow = DateTime.Now;
}
}

بنابراین، دو فیلد فقط خواندنی داریم: اولین آنها خصوصی و دومی عمومی است (ما معمولاً ویژگی هایی برای آنها داریم؛ که بعداً به آنها می رسیم). اولین فیلد بدون مقدار بیان شده است (می توانیم فیلدها را بدون مقدار بیان کنیم؛ اما با ثابت ها نمی توانیم این کار را انجام دهیم)؛ در حالی که فیلد دوم بلافاصله مقدار دهی می شود. شما همچنین می توانید مشاهده کنید که ما از کلاس DateTime به عنوان نوع داده استفاده کرده ایم و یک مقدار غیر ثابت را به آن اختصاص داده ایم). به عبارت دیگر؛ موارد زیادی وجود دارد که نمی توانیم در استفاده از ثابت ها به کار ببریم ولی در به کارگیری آنها در حالتی که از فیلدهای فقط خواندنی استفاده می کنیم؛ مشکلی وجود ندارد؛ به این ترتیب فیلدهای فقط خواندنی جایگزین مناسبی برای ثابت ها هستند.

توجه داشته باشید که چگونه مقداری را به فیلد rightNow در سازنده ی کلاس SomeClass اختصاص دادیم. همان طور که پیشتر ذکر شده است؛ این آخرین شانس برای تخصیص یک مقدار به یک فیلد فقط خواندنی است. پس از آن؛ چه در یک متدی درون کلاس در حال تعریف باشید یا خارج از آن؛ اگر سعی کنید مقداری را به فیلد فقط خواندنی اختصاص دهید؛ از کامپایلر خطا دریافت می کنید.

خلاصه

یک ثابت را درون دامنه یک متد یا در یک کلاس می توان تعریف کرد. این امر به شما اجازه می دهد مقداری را تعریف کنید که در هنگام کامپایل کردن برنامه شناخته شده است و دیگر قابل تغییر نمی باشد. آیتم های معمولی که برای ثابت ها به کار می رود؛ اعداد صحیح؛ رشته ها و متغیرهای بولی هستند. اگر به دنبال انعطاف پذیری بیشتری هستید؛ سعی کنید فیلدهای فقط خواندنی را امتحان کنید که در بالا شرح داده ایم.

profile name
میلاد حیدری

بخندید کتاب بخونید و خوب باشید تا جامعه مون به آرامش برسه. لطفا ! هر سوالی دارید در بخش نظرات مطرح کنید. ما یا سایر هموطنان عزیز پاسخ خواهیم داد. برای کمک به سایت ما و گسترش آموزش در بین هموطنان، در سایتها، وبلاگ ها و شبکه های اجتماعی لینک سایت ما را درج کنید.

مطالب پیشنهادی برای شما

محصولات مرتبط

مشاهده همه
آموزش برنامه نویسی سی پلاس پلاس
آموزش برنامه نویسی سی پلاس پلاس
قیمت محصول 230,000 تومان 250,000
ادامه مطلب

دیدگاهتان را بنویسید

1 2 3 4 5

0 نظر درباره «آموزش ثابت ها (کلیدواژه const) در سی شارپ به زبان ساده»

    هنوز نظری برای این بخش ثبت نشده است
مشاهده همه نظرات
سبد خرید
سبد خرید شما خالی است
× جهت نصب روی دکمه زیر در گوشی کلیک نمائید
آی او اس
سپس در مرحله بعد برروی دکمه "Add To Home Screen" کلیک نمائید