فرشید عزیزی
فرشید عزیزی
خواندن ۴ دقیقه·۳ ماه پیش

دوره آموزشی #C - قسمت نهم- Constructors

دوره آموزشی #C - قسمت هشتم- Access Modifiers

خلاصه : در این پست ، با سازنده های C# و نحوه استفاده از آنها برای مقداردهی اولیه اشیا آشنا خواهید شد.

مفهوم سازنده ها(constructors) در سی شارپ :

سازنده متد خاصی است که نام آن با نام کلاس یکی است. سازنده به دلایل زیر خاص است:

  • سازنده نوع بازگشتی را ندارد.
  • هنگام ایجاد یک شی جدید، کامپایلر #C، به طور خودکار سازنده را فراخوانی می کند.

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

کامپایلر C# هنگام تعریف کلاس به طور ضمنی یک سازنده بدون هیچ پارامتری(parameterless constructor) ایجاد می کند. برای درک این موضوع مثال زیر را در نظر بگیرید :

// Person.cs class Person { }

سی شارپ به طور ضمنی یک سازنده بدون هیچ پارامتری مانند زیر ایجاد می کند:

// Person.cs class Person { public Person() { } }

مثال زیر نشان می دهد که چگونه #C به طور ضمنی سازنده را هنگام ایجاد یک شی جدید فراخوانی می کند:

// Program.cs Person p1 = new();

Output:

Create a new Person object

تعریف یک constructor :

مثال زیر یک سازنده با سه پارامتر برای کلاس Person تعریف می کند:

// Person.cs class Person { private string firstName; private string lastName; private byte age; public Person(string firstName, string lastName, byte age) { this.firstName = firstName; this.lastName = lastName; this.age = age; } public string GetFullName() { return $&quot{this.firstName} {this.lastName}&quot } }

در این مثال سازنده سه آرگومان را می پذیرد و private پراپرتی های firstName، lastName و age را مقداردهی اولیه می کند.

هنگامی که به طور صریح یک سازنده تعریف می کنید، کامپایلر #C دیگر به صورت ضمنی سازنده بدون پارامتر را به کلاس اضافه نمی کند.

بنابراین، برای ایجاد یک شیء جدید Person، باید سه آرگومان مانند زیر را ارسال کنید

// Program.cs var p1 = new Person(&quotJohn&quot, &quotDoe&quot, 25);

و یا :

Person p2 = new(&quotJohn&quot, &quotDoe&quot, 25);

تعریف چند constructor برای یک کلاس:

سی شارپ به شما امکان می دهد چندین سازنده با پارامترهای مختلف برای یک کلاس تعریف کنید. مثلا:

// Person.cs class Person { private string firstName; private string lastName; private byte age; public Person() { } public Person(string firstName, string lastName) { this.firstName = firstName; this.lastName = lastName; } public Person(string firstName, string lastName, byte age) { this.firstName = firstName; this.lastName = lastName; this.age = age; } }

در این مثال، کلاس Person دارای سه سازنده است.

  • سازنده اول یک سازنده بدون پارامتر است که هیچ پارامتری را نمی پذیرد.
  • سازنده دوم دو پارامتر را می پذیرد و خصوصیات firstName و lastName را مقداردهی اولیه می کند.
  • سازنده سوم سه پارامتر را می پذیرد و ویژگی های firstName، lastName و age را مقداردهی اولیه می کند.

با انجام این کار، می توانید با ارسال هیچ پارامتر، دو پارامتر یا سه پارامتر به سازنده های مربوطه، یک Personobject جدید ایجاد کنید:

// Program.cs var p1 = new Person(); var p2 = new Person(&quotJohn&quot, &quotDoe&quot); var p3 = new Person(&quotJohn&quot, &quotDoe&quot, 25);

برای انعطاف پذیری بیشتر برای مقداردهی اولیه یک شی جدید می‌توانید یک سازنده را در سازنده دیگری فراخوانی کنید، همانطور که در مثال زیر نشان داده شده است:

// Person.cs class Person { private string firstName; private string lastName; private byte age; public Person() { Console.WriteLine(&quotInitialized the object&quot); } public Person(string firstName, string lastName) : this() { this.firstName = firstName; this.lastName = lastName; Console.WriteLine(&quotInitialized the first name & last name properties&quot); } public Person(string firstName, string lastName, byte age) : this(firstName, lastName) { this.age = age; Console.WriteLine(&quotInitialized the age property&quot); } }

در این مثال، سازنده دوم، سازنده اول را از طریق این کلمه کلیدی this فراخوانی می کند:

public Person(string firstName, string lastName) : this()

هنگامی که یک شی با دو پارامتر ایجاد می کنید، این سازنده سازنده بدون پارامتر را قبل از اجرای بدنه آن فراخوانی می کند. سازنده سوم سازنده دوم را از طریق این کلمه کلیدی با آرگومان های firstName و lastName فراخوانی می کند:

public Person(string firstName, string lastName, byte age) : this(firstName, lastName)

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

public Person() public Person(string firstName, string lastName) : this() public Person(string firstName, string lastName, byte age) : this(firstName, lastName)

با انجام این کار، می توانید از منطق سازنده های دیگر هنگام مقداردهی اولیه اشیاء استفاده مجدد کنید.

لازم نیست همه پراپرتی ها دارای پارامترهای سازنده باشند. به عنوان مثال کلاس person می تواند دارای propertyای باشد که توسط هیچ پارامتر سازنده ای تنظیم نشده است، بنابراین EF Core آن را پس از فراخوانی سازنده به روش عادی تنظیم می کند.
توجه داشته باشید EF Core نمی تواند ویژگی های ناوبری (navigation properties) را با استفاده از سازنده تنظیم کند.

خلاصه :

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

بیشتر بخوانید : دوره آموزشی #C - قسمت 10- Property

بیشتر بخوانید : نقشه راه توسعه دهندگان Asp.NET Core

https://zarinp.al/farshidazizi

دوره آموزشیسی شارپ
Software Engineer
شاید از این پست‌ها خوشتان بیاید