کلاس ها با استفاده از کلمه کلیدی class ، بصورتی که در مثال زیر نشان داده شده، اعلان می شوند.
class TestClass { // Methods, properties, fields, events, delegates // and nested classes go here. }
ملاحظات
بر خلاف ++C ، در #C فقط یک ارث بری مجاز است. به بیانی دیگر، پیاده سازی یک کلاس فقط می تواند از یک کلاس پایه ای ، ارث بری شود. هرچند، یک کلاس می تواند بیش از یک رابط (interface) را پیاده سازی (implement) کند. جدول زیر مثال هایی از ارث بری کلاس و پیاده سازی رابط را نشان می دهد.
ارث بری | مثال |
بدون ارث بری | class ClassA { } |
ارث بری یگانه | class DerivedClass: BaseClass { } |
بدون ارث بری، پیاده سازی دو رابط | class ImplClass: IFace1, IFace2 { } |
ارث بری یگانه، پیاده سازی یک رابط | class ImplDerivedClass: BaseClass, IFace1 { } |
سطوح دسترسی protected و private فقط روی کلاس های تو در تو مجازند.
شما همچنین می توانید کلاس های جامعی (generic) که دارای پارامتر های نوع باشند، اعلان کنید. برای اطلاعات بیشتر به "کلاس های جامع" مراجعه کنید.
یک کلاس می تواند حاوی اعلان هایی از اعضای زیر باشد.
- Constructors (متدهای سازنده)
- Destructors (متدهای تخریب گر)
- Fields (فیلدها/متغیرها)
- Methods (متدها/توابع)
- Properties (پراپرتی ها/خصیصه ها)
- Indexers (شاخص ساز)
- Operators (عملگرها)
- Events (رویدادها)
- Delegates (وکیل ها)
- Classes (کلاس ها)
- Interfaces (رابط ها)
- Structs (ساختارها)
مثال
مثال زیر اعلان فیلدها، متدهای سازنده و متدهای کلاس را توضیح می دهد. همچنین نمونه سازی شیئ و چاپ داده های نمونه را نشان می دهد. در این مثال، دو کلاس اعلان شده، کلاس Child، که حاوی دو فیلد با دسترسی خصوصی (name و age) و دو متد عمومی است. کلاس StringTest، که برای نگهداری Main استفاده شده.
class Child { private int age; private string name; // Default constructor: public Child() { name = "N/A"; } // Constructor: public Child(string name, int age) { this.name = name; this.age = age; } // Printing method: public void PrintChild() { Console.WriteLine("{0}, {1} years old.", name, age); } } class StringTest { static void Main() { // Create objects by using the new operator: Child child1 = new Child("Craig", 11); Child child2 = new Child("Sally", 10); // Create an object using the default constructor: Child child3 = new Child(); // Display results: Console.Write("Child #1: "); child1.PrintChild(); Console.Write("Child #2: "); child2.PrintChild(); Console.Write("Child #3: "); child3.PrintChild(); } } /* Output: Child #1: Craig, 11 years old. Child #2: Sally, 10 years old. Child #3: N/A, 0 years old. */
نکات
دقت کنید که در مثال قبل، فیلدهای خصوصی name و age فقط از طریق متدهای عمومی (public) از کلاس Child قابل دستیابی هستند. برای مثال، شما نمی توانید فیلد name از کلاس Child را با بیانی شبیه بیان زیر، از داخل متد Main چاپ کنید.
Console.Write(child1.name); // Error
دستیابی به اعضای خصوصی Child از داخل Main فقط در صورتی امکان پذیر است که Main عضوی از کلاس بوده باشد.
نوع های اعلان شده در درون کلاسی بدون اصلاحگر دسترسی بطور پیش فرض private (خصوصی) هستند، بنابراین، در این مثال اگر کلمه کلیدی private مربوط به اعضای داده ای حذف شود، آنها خصوصی می مانند.
در آخر، به شیئی که توسط سازنده پیش فرض (child3) ساخته شده دقت کنید، فیلد age بطور پیش فرض با مقدار صفر مقدار دهی اولیه می شود.