کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

آموزش کلاس در سی شارپ

دوره آموزش برنامه نویسی C#

کلیه حقوق مادی و معنوی این مقاله متعلق به آموزشگاه تحلیل داده می باشد و هر گونه استفاده غیر قانونی از آن پیگرد قانونی دارد.

آموزش کلاس در سی شارپ

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

 تعریف کلاس

تعریف کلاس با کلمه ی کلیدی class شروع می شود و نام آن کلاس و بدنه ی کلاس دنبال می شود و بایک جفت آکولاد منحنی شکل احاطه شده است. در زیر یک فرم کلی از تعریف یک کلاس را مشاهده می کنید.

 class  class_name
{
           
// member variables
       
    variable1;
            variable2;
            ...
            variableN;
           
// member methods
       
    <return type> method1(parameter_list)
            {
               
// method body
       
    }
            <
return type> method2(parameter_list)
            {
               
// method body
       
    }
            ...
            <
return type> methodN(parameter_list)
            {
               
// method body
       
    }
        }

لطفا توجه داشته باشید که

 Access specifiers

قوانین دسترسی را برای اعضا و همچنین برای خود کلاس مشخص می کنند، که اگر ذکر نشده باشد access specifier پیش فرض برای یک کلاس internal می باشد. Access پیش فرض برای اعضا private می باشد.

نوع داده نوع متغیر را مشخص می کند و برای دسترسی به اعضای کلاس از اپراتور دات (.) استفاده خواهید کرد.

اپراتور دات نام یک آبجکت را به نام یک عضو متصل می کند.

 مثال زیر مفاهیم بحث شده تا اینجا را توضیح می دهد.

 using System;
        namespace BoxApplication
        {
           
class Box
    {
              
public double length;   // Length of a box
       
       public double breadth;  // Breadth of a box
       
       public double height;   // Height of a box
       
    }
           
class Boxtester
    {
               
static void Main(string[] args)
                {
                    Box Box1 =
new Box();        // Declare Box1 of type Box
       
            Box Box2 = new Box();        // Declare Box2 of type Box
       
            double volume = 0.0;         // Store the volume of a box here
       
            // box 1 specification
       
            Box1.height = 5.0;
                    Box1.length =
6.0;
                    Box1.breadth =
7.0;
                   
// box 2 specification
       
            Box2.height = 10.0;
                    Box2.length =
12.0;
                    Box2.breadth =
13.0;
                   
// volume of box 1
       
            volume = Box1.height * Box1.length * Box1.breadth;
                    Console.WriteLine(
"Volume of Box1 : {0}",  volume);
                   
// volume of box 2
       
            volume = Box2.height * Box2.length * Box2.breadth;
                    Console.WriteLine(
"Volume of Box2 : {0}"
, volume);
                    Console.ReadKey();
                }
            }
        }

وقتی که برنامه ی بالا کامپایل شده و اجرا می شود نتایج زیر را به دنبال دارد.

Volume of Box1 : 210
        Volume of Box2 : 1560

عملکردهای عضو و Encapsulation

عملکرد یک عضو از یک کلاس عملکردی است که تعریف خود یا نمونه ی اولیه ی خود را در تعریف کلاس دارد، مانند هر متغیر دیگری. روی هر آبجکتی از کلاس که یک عضو است، عملی انجام می دهد و دسترسی به همه ی اعضای آن کلاس برای آن آبجکت دارد.

متغیرهای یک عضو ویژگی های یک آبجکت می باشند و به طور خصوصی نگهداری می شوند تا encapsulation را اجرا کنند. این متغیرها تنها با عملکردهای عضو عمومی قابل دسترسی می باشند.

 اجازه بدهید مفاهیم بالا را در یک مجموعه قرار دهیم و مقدار مختلف اعضا را در یک کلاس قرا دهیم.

using System;
        namespace BoxApplication
        {
           
class Box
    {
              
private double length;   // Length of a box
       
       private double breadth;  // Breadth of a box
       
       private double height;   // Height of a box
       
       public void setLength( double len )
               {
                    length = len;
               }
              
public void setBreadth( double bre )
               {
                    breadth = bre;
               }
              
public void setHeight( double hei )
               {
                   height = hei;
               }
              
public double getVolume()
               {
                  
return length * breadth * height;
               }
            }
           
class Boxtester
    {
              
static void Main(string[] args)
                {
                    Box Box1 =
new Box();        // Declare Box1 of type Box
       
            Box Box2 = new Box();
                   
double volume;
                   
// Declare Box2 of type Box
       
            // box 1 specification
       
            Box1.setLength(6.0);
                    Box1.setBreadth(
7.0);
                    Box1.setHeight(
5.0);
                   
// box 2 specification
       
            Box2.setLength(12.0);
                    Box2.setBreadth(
13.0);
                    Box2.setHeight(
10.0);
                   
// volume of box 1
       
            volume = Box1.getVolume();
                    Console.WriteLine(
"Volume of Box1 : {0}" ,volume);
                   
// volume of box 2
       
            volume = Box2.getVolume();
                    Console.WriteLine(
"Volume of Box2 : {0}"
, volume);
                    Console.ReadKey();
                }
            }
        }

وقتی برنامه ی بالا کامپایل شده و اجرا می شود، نتایج زیر را در بر خواهد داشت.

Volume of Box1 : 210
        Volume of Box2 : 1560

سازنده ها در C#

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

using System;
        namespace LineApplication
        {
          
class Line
   {
             
private double length;   // Length of a line
       
      public Line()
              {
                 Console.WriteLine(
"Object is being created");
              }
             
public void setLength( double len )
              {
                 length = len;
              }
             
public double getLength()
              {
                
return length;
              }
             
static void Main(string[] args)
              {
                 Line line =
new Line();  
                
// set line length
       
         line.setLength(6.0);
                 Console.WriteLine(
"Length of line : {0}"
, line.getLength());
                 Console.ReadKey();
              }
           }
        }

وقتی که برنامه ی بالا کامپایل شده و اجرا می شود، نتایج زیر را در بر دارد.

Object is being created
        Length of line :
6

 

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

 using System;
        namespace LineApplication
        {
          
class Line
   {
             
private double length;   // Length of a line
       
      public Line(double len)  //Parameterized constructor
       
      {
                 Console.WriteLine(
"Object is being created, length = {0}", len);
                 length = len;
              }
             
public void setLength( double len )
              {
                 length = len;
              }
             
public double getLength()
              {
                
return length;
              }
             
static void Main(string[] args)
              {
                 Line line =
new Line(10.0);
                 Console.WriteLine(
"Length of line : {0}", line.getLength());
                
// set line length
       
         line.setLength(6.0);
                 Console.WriteLine(
"Length of line : {0}"
, line.getLength());
                 Console.ReadKey();
              }
           }
        }

وقتی که برنامه ی بالا کامپایل شده و اجرا می شود، نتایج زیر را به دنبال دارد.

Object is being created, length = 10
        Length of line : 10
        Length of line :
0

تخریب کننده ها (destructors) در C#

  Destructor عملکرد خاص یکی از اعضای کلاس می باشد که هروقت یک از آبجکت ها از محدوده خارج شود، این عملکرد اجرا می شود. تخریب کننده دقیقا همان نام کلاس را دارد که با این نشان (~) پیشوند دار شده است و نه می تواند یک مقدار را بازگرداند و نه هیچ پارامتری را بازگرداند.

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

مثال زیر مفهوم تخریب کننده را توضیح می دهد.

using System;
        namespace LineApplication
        {
          
class Line
   {
             
private double length;   // Length of a line
       
      public Line()  // constructor
       
      {
                 Console.WriteLine(
"Object is being created");
              }
              ~Line()
//destructor
       
      {
                 Console.WriteLine(
"Object is being deleted");
              }
            
public void setLength( double len )
              {
                 length = len;
              }
             
public double getLength()
              {
                
return length;
              }
             
static void Main(string[] args)
              {
                 Line line =
new Line();
                
// set line length
       
         line.setLength(6.0);
                 Console.WriteLine(
"Length of line : {0}"
, line.getLength());         
              }
           }
        }

وقتی که برنامه ی بالا اجرا می شود، نتایج زیر را به دنبال خواهد داشت.

Object is being created
        Length of line :
6
        Object is being deleted

اعضای استاتیک از یک کلاس C#

با استفاده از کلمه ی کلیدی static می توان اعضای کلاس را به عنوان استاتیک تعریف کرد. وقتی که عضوی از یک کلاس را به عنوان استاتیک معرفی می کنیم به این معناست که مهم نیست چه تعداد از آبجکت های کلاس ایجاد شده اند، تنها یک کپی از عضو استاتیک وجود دارد. کلمه ی کلیدی static به این معناست که تنها یک نمونه عضو برای یک کلاس وجود دارد. متغیرهای استاتیک برای تعریف ثابت ها به کار می روند، زیرا مقادیر آنها با تقاضایکلاس و بدون ایجاد نمونه ای از آن قابل بازیابی می باشد. متغیرهای استاتیک خارج از عملکرد عضو یا تعریف کلاس می توانند مقداردهی اولیه را شروع کنند.شما همچنین می توانید مقداردهی اولیه ی متغیرهای استاتیک را در تعریف کلاس شروع کنید.

 مثال زیر استفاده از متغیرهای استاتیک را توضیح می دهد.

 using System;
        namespace StaticVarApplication
        {
           
class StaticVar
    {
              
public static int num;
               
public void count()
                {
                    num++;
                }
               
public int getNum()
                {
                   
return num;
                }
            }
           
class StaticTester
    {
               
static void Main(string[] args)
                {
                   StaticVar s1 =
new StaticVar();
                    StaticVar s2 =
new StaticVar();
                    s1.count();
                    s1.count();
                    s1.count();
                    s2.count();
                    s2.count();
                    s2.count();       
                    Console.WriteLine(
"Variable num for s1: {0}", s1.getNum());
                    Console.WriteLine(
"Variable num for s2: {0}"
, s2.getNum());
                    Console.ReadKey();
                }
            }
        }

وقتی که برنامه ی بالا کامپایل شده و اجرا می شود، نتایج زیر را در به دنبال دارد.

Variable num for s1: 6
        Variable num for s2: 6

 

همچنین ممکن است یک member function را به عنوان static معرفی کنید. چنین عملکردهایی می توانند تنها به متغیرهای استاتیک دسترسی داشته باشند. عملکردهای استاتیک حتی قبل از ایجاد آبجکت وجود دارند. مثال زیر استفاده از عملکردهای استاتیک (static functions) را توضیح می دهد.

using System;
        namespace StaticVarApplication
        {
           
class StaticVar
    {
              
public static int num;
               
public void count()
                {
                    num++;
                }
               
public static int getNum()
                {
                   
return num;
                }
            }
           
class StaticTester
    {
               
static void Main(string[] args)
                {
                    StaticVar s =
new StaticVar();
                    s.count();
                    s.count();
                    s.count();                 
                    Console.WriteLine(
"Variable num: {0}"
, StaticVar.getNum());
                    Console.ReadKey();
                }
            }
        }

وقتی که برنامه ی بالا کامپایل شده و اجرا می شود، نتیجه ی زیر را به دنبال دارد.

Variable num: 3
1394/07/27 22772 2308
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...