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

کلاس ها در سی شارپ

کلاس ها در سی شارپ

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

تعریف کلاس در سی شارپ

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

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

توجه داشته باشید:

  • Access specifiers قوانین دسترسی برای اعضا و همچنین خود کلاس را مشخص می کند. اگر ذکر نشده باشد، به طور پیش فرض access specifierسطح دسترسی internal را برای نوع کلاس تعیین می کند. دسترسی پیش فرض برای اعضا privateاست.
  • Data type نوع متغیر را مشخص می کند، و return type، نوع داده ی داده ی بازگشتی از متد را در صورت وجود مشخص می کند.
  • برای دسترسی به اعضای کلاس، از نقطه اپراتور (.) استفاده می شود.
  • عملگر نقطه ، نام یک شی را با نام یک عضو پیوند می دهد.

مثال زیر، مفاهیمی که  تا کنون بحث شد را نشان می دهد:

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

توابع عضو و کپسوله سازی در سی شارپ

تابع عضو کلاس، توابعی هستند که تعریف خودشان را دارند و prototype آن همانند هر متغیر دیگری در کلاس تعریف می شود. آن روی هر شیء از کلاس که در آن عضو است عمل می کند، و به تمام اعضای کلاس در آن شی دسترسی دارد.
متغیرهای عضو، صفات یک شی (از دیدگاه طراحی) هستند و آنها برای پیاده سازی کپسوله سازی، خصوصی نگهداری می شوند. این متغیرها تنها با استفاده از توابع عضو public قابل دسترسی هستند.
مثال زیر مفاهیم فوق را نشان می دهد. set و get توابع عضو در کلاس:

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

سازنده ها در سی شارپ constructor

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

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

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

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 : 6

نابود کننده ها در سی شارپ Destructors

یک مخرب یا نابود کننده، یک تابع عضو خاصی از کلاس است که هر زمان که شی ای از آن کلاس بخواهد از دامنه آن کلاس خارج شود، اجرا می شود . یک مخرب دقیقا هم نام با کلاس خود است و با پیشوند تیلدا (~) شروع می شود. مخرب ها نه می توانند پارامتر بگیرند . نه مقدار برگشتی دارند.
مخرب ها می­توانند برای آزاد کردن منابع حافظه قبل از خروج از برنامه بسیار مفید باشند. مخرب نمی تواند به ارث برده شود و یا overload شود.
مثال زیر مفهوم مخرب را توضیح می دهد:

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

اعضای استاتیک کلاس ها در سی شارپ (Static Members of a C# Class)

ما می توانیم اعضای کلاس را با استفاده از کلمه کلیدی 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

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

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

برچسب ها

ممکن است به این موارد نیز علاقه مند باشید:

0 دیدگاه در “آموزش شی گرایی در سی شارپ – کلاس ها در سی شارپ”

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

کد امنیتی را در کادر زیر بنویسید *