منو

فیلدها و رفتارها(قسمت هفدهم)

آموزش برنامه نویسی شئ گرا در زبان سی شارپ - آشنایی با فیلدها و رفتارها
لیست جلسات
DatoosTech img Course

قسمت پنجم

دستورات کنسول و متغیرها

DatoosTech img Course

قسمت ششم

نوع های داده اولیه

DatoosTech img Course

قسمت هفتم

عملگرهای زبان سی شارپ

DatoosTech img Course

قسمت هشتم

دستورات کنترلی if else

DatoosTech img Course

قسمت نهم

دستورات کنترلی switch

DatoosTech img Course

قسمت دهم

حلقه for

DatoosTech img Course

قسمت دوازدهم

حلقه while

DatoosTech img Course

قسمت دوازدهم

آرایه ها و دستور foreach

DatoosTech img Course

قسمت سیزدهم

متدها در زبان سی شارپ (بخش اول)

DatoosTech img Course

قسمت چهاردهم

متدها در زبان سی شارپ (بخش دوم)

DatoosTech img Course

قسمت پانزدهم

مقدمه برنامه نویسی شی گرا

DatoosTech img Course

قسمت شانزدهم

کلاس، اشیاء و فضاهای نام

DatoosTech img Course

قسمت هفدهم

فیلدها و رفتارها

DatoosTech img Course

قسمت هجدهم

Property ها

DatoosTech img Course

قسمت نوزدهم

سازنده ها و روش های ایجاد اشیاء

DatoosTech img Course

قسمت بیستم

وراثت یا Inheritance

DatoosTech img Course

قسمت بیست و یکم

آشنایی با مفهوم Polymorphism

DatoosTech img Course

قسمت بیست و دوم

کلاس های abstract و sealed

DatoosTech img Course

قسمت بیست و سوم

سازنده ها در وراثت، کلمه کلیدی protected و فیلدهای readonly

DatoosTech img Course

قسمت بیست و چهارم

کلاس های static و partial و Extension Method ها

DatoosTech img Course

قسمت بیست و پنجم

Reference Types و Value Types

DatoosTech img Course

قسمت بیست و ششم

آشنایی با کاربرد interface ها

DatoosTech img Course

قسمت بیست و هفتم

مفاهیم Inversion of Control و Dependency Injection

DatoosTech img Course

قسمت بیست و هشتم

Type Casting و انواع Cast ها

DatoosTech img Course

قسمت بیست و نهم

operator overloading و تعریف cast ها

DatoosTech img Course

قسمت سی ام

مفاهیم boxing و unboxing

DatoosTech img Course

قسمت سی و یکم

قابلیت Generics

DatoosTech img Course

قسمت سی و دوم

نکات تکمیلی Generic ها، کلاس List و کلاس Dictionary

DatoosTech img Course

قسمت سی و سوم

استثناء ها (Exceptions) و مدیریت خطاها

مطالب این جلسه
در قسمت قبلی آموزش زبان سی شارپ با مفاهیمی مانند کلاس، شئ، فضای نام و دستور using آشنا شدیم. در این قسمت ابتدا شیوه تعریف کلاس و شئ را مروری کوتاه کرده و سپس به بررسی شیوه تعریف فیلد و رفتار در کلاس خواهیم پرداخت.

با کلاس Person شروع می کنیم که در قسمت قبل کلاسی با نام Person ایجاد کردیم. شیوه تعریف این کلاس به صورت زیر بود:

 
            
                public class Person
                {
                }
            
        

بعد از ایجاد کلاس باید از روی آن یک شئ یا اصطلاحاً Instance یا نمونه بسازیم:

 
            
                Person person = new Person();
            
        

دقت کنید، می توانیم از کلمه کلیدی var که در قسمت های ابتدایی این آموزش با آن آشنا شدیم استفاده کنیم:

 
        
var person = new Person();
            
        

کلمه کلیدی var را می توان هنگام ایجاد متغیرها و ایجاد شئ از روی کلاس ها استفاده کرد. ما تا اینجا تنها یک کلاس تعریف کردیم. اما این کلاس هیچ خصوصیت یا رفتاری ندارد. زمانی که کلاسی تعریف می کنید باید اعضا یا Member های آن کلاس را مشخص کنید. هر کلاس به طور کلی می تواند شامل موارد زیر باشد:

  1. Field
  2. Property
  3. Method
  4. Indexer
  5. Event
  6. Nested Type


آشنایی با Field ها


در ابتدا به بررسی مفهوم Field پرداخته و شیوه دسترسی به اعضای کلاس را خواهیم گفت. فیلد متغیری است که داخل یک کلاس تعریف شده و امکان ذخیره مقداری را به ما می دهد. این متغیر می تواند از نوع داده های اولیه دات نت یا کلاسی باشد که تعریف کرده ایم. شیوه تعریف Field دقیقاً مشابه تعریف متغیر می باشد. با این تفاوت که ما زمان تعریف یک Field امکان استفاده از کلمه کلیدی var را نداریم. برای کلاس Person دو فیلد با نام های FirstName و LastName تعریف می کنیم:

 
            
                public class Person
                {
                public string FirstName;
                public string LastName;
                }
            
        

دقت کنید که قبل از مشخص کردن نوع داده فیلد، سطح دسترسی آن مشخص شده است. در اینجا ما فیلدها را از نوع public تعریف کردیم. یعنی این فیلدها خارج از scope کلاس و بیرون از پروژه نیز قابل دسترس میی باشند. حال که فیلدهای مورد نظر را داخل کلاس تعریف کردیم، می توانیم بعد از ایجاد شئ از کلاس، به این فیلدها دسترسی داشته باشیم. برای دسترسی به فیلدها بعد از نوشتن نام شئ از کاراکتر . استفاده می کنیم تا لیستی از اعضای آن کلاس برای نمایش داده شود. تصویر زیر مربوط به کد ما در متد Main است:

Field1


کد Main را به صورت زیر تغییر دهید:

 
            
                var person = new Person();

                person.FirstName = "Erfan";
                person.LastName = "Khan";

                Console.WriteLine(person.Firstname + " " + LastName);

            
        

کد بالا از سه بخش نشکیل شده است.
  1. ایجاد یک شئ از روی کلاس Person
  2. مقدار دهی فیلد ها
  3. استفاده از فیلدها برای نمایش خروجی

در همه شرایط، زمانی که میخواهیم به یک عضو کلاس دسترسی داشته باشیم، باید از کاراکتر . استفاده کنیم، برای مثال در فیلدهای بالا، چه زمانی که قصد مقدار دهی فیلد را داریم، چه زمانی که می خواهیم مقداری از فیلد را بخوانیم.

بوسیله فیلدها می توان خصوصیات یک کلاس را تعریف کرد، در مورد خصوصیات در قسمت قبل توضیحاتی دادیم. مورد بعدی تعریف رفتار برای کلاس می باشد. رفتارها همان متدها در کلاس ها هستند. شیوه تعریف متد برای کلاس، تفاوتی با تعریفاتی که در قسمت قبل از متد گفتیم ندارد، به جز اینکه متدهایی که داخل یک کلاس تعریف می شوند static نیستند. می توانیم رفتارهای یک کلاس را static تعریف کنیم، مانند کاری در کلاس Program در قسمت های قبلی می کردیم، اما در حال حاضر، متدها به صورت static تعریف نمی شوند. با اعضای static کلاس ها در قسمت های بعد به صورت کامل آشنا خواهیم شد، اما به صورت خلاصه تفاوت اعضای static و غیر static در این است که برای دسترسی به اعضای static نیازی به ایجاد شئ از روی کلاس نیست، مانند کلاس Console که برای استفاده از اعضای آن مانند WriteLine شئ ای از کلاس Console ایجاد نمی کنیم، اما برای استفاده از اعضای غیر static باید حتماً از روی کلاس یک شئ ایجاد شود.


تعریف رفتار یا Method برای کلاس


در ادامه می خواهیم برای کلاس Person یک رفتار تعریف کنیم. موجودیت Person چه کارهایی می تواند انجام دهد؟ برای مثال یک شخص می تواند صحبت کند، پس رفتاری با نام Speak تعریف می کنیم و در آن یک پیغام مناسب در خروجی چاپ می کنیم:

 
            
                public class Person
                {
                public string FirstName;
                public string LastName;

                public void Speak()
                {
                Console.WriteLine("Hello, my name is " + FirstName + " " + LastName + ".");
                }
                }

            
        

در کد بالا، متد یا رفتار Speak پیغامی را به همراه نام و نام خانوداگی مشخص شده توسط فیلدها در خروجی نمایش می دهد. دقت کنید، داخل کلاس هم ما می توانیم از اعضای یک کلاس استفاده کنیم. خیلی وقت ها رفتارهای یک کلاس وابسته به مقادیر خصوصیات یک کلاس هستند. برای مثال شما یک ماشین را در نظر بگیرید، خصوصیتی داریم به نام دنده ماشین، یک خصوصیت دیگر به نام دور موتور و رفتاری داریم به نام حرکت. رفتار حرکت بر اساس دنده و دور موتور سرعت خواهد گرفت. حال کد Main را به صورت زیر تغییر می دهیم:

 
            
                var person = new Person();
                person.FirstName = "Erfan";
                person.LastName = "Khan";
                person.Speak();
                Console.ReadLine();

            
        


مثال عملی: کلاس Calculator


در ادامه یک مثال واقعی تر را بررسی می کنیم. کلاسی می نویسیم با نام Calculator که دو فیلد با نام های FirstNumber و SecondNumber دارد. همچنین چهار متد با نام های Sum و Substract و Multiply و Divide تعریف می کنیم که بر اساس مقادیر FirstNumber و SecondNumber، در خروجی حاصل جمع، تفریق، ضرب یا تقسیم را نمایش دهد. کلاس Calculator را به صورت زیر تعریف کنید:

 
            
                public class Calculator
                {
                public int FirstNumber;
                public int SecondNumber;

                public int Sum()
                {
                return FirstNumber + SecondNumber;
                }

                public int Substract()
                {
                return FirstNumber - SecondNumber;
                }

                public int Multiply()
                {
                return FirstNumber * SecondNumber;
                }

                public int Divide()
                {
                return FirstNumber / SecondNumber;
                }
                }
            
        

دقت کنید، رفتارهای کلاس همگی مقدار بازگشتی از int دارند. در ادامه متد Main را به صورت زیر تغییر دهید:

 
            
                var calculator = new Calculator();
                calculator.FirstNumber = 12;
                calculator.SecondNumber = 17;
                Console.WriteLine("Sum: " + calculator.Sum());
                Console.WriteLine("Substract: " + calculator.Substract());
                Console.WriteLine("Multiply: " + calculator.Multiply());
                Console.WriteLine("Divide: " + calculator.Divide());
                Console.ReadLine();
            
        

کد بالا، خروجی حاصل جمع، تفریق، ضرب و تقسیم اعداد 12 و 17 را در خروجی چاپ می کند. تا اینجا با مبحث رفتارها و خصوصیات در کلاس ها آشنا شدیم. در بخش بعدی در باره شیوه کنترل دسترسی به مقادیر یک خصوصیات در کلاس ها یعنی مبحث Property ها صحبت خواهیم کرد