احسان میرسعیدی
احسان میرسعیدی
خواندن ۲ دقیقه·۶ سال پیش

سوال هایی در مورد شی گرایی در سی شارپ

1. فیلد f را به صورت static و public در کلاس A تعریف کرده ایم. کلاس های B و C از کلاس A به ارث برده شده اند. آیا فیلد f به ازای کلاس های B و C، کپیِ مجزایی را خواهد داشت؟ در مورد کلاس های جنریک چطور؟
پاسخ:
https://stackoverflow.com/questions/5851497/static-fields-in-a-base-class-and-derived-classes

2. زمان اجرای constructor های static چه وقت می باشد؟
پاسخ:
https://stackoverflow.com/questions/1437352/when-is-a-static-constructor-called-in-c

3. چطور می توانیم، متدی تک پارامتری را تعریف کنیم که هر نوع ورودی ایی را بتواند بپذیرد و نوع پارامترِ متد از نوع object و یا dynamic نباشد.
پاسخ:
https://stackoverflow.com/questions/5886875/let-method-take-any-data-type-in-c-sharp

4. در دو کلاس A و B، متد M با نام و امضای یکسان تعریف شده است. این دو کلاس به طور کلی مجزا می باشند و از کلاس واحدی به ارث نرفته اند. چطور می توانیم در کلاس C متدی تعریف کنیم که با گرفتن یک نمونه از کلاس A و یا B، متد M را صدا بزند با این فرض که متدی که تعریف می کنیم فقط یک پارامتر دریافت کند و درون متد هم هیچ نوع Cast ایی صورت نگیرد. (Duck Typing)
پاسخ:
https://stackoverflow.com/questions/21278078/what-is-interface-duck-typing

5. چرا متد هایی که در یک کلاس virtual تعریف شده اند، نباید یکدیگر را صدا بزنند؟
پاسخ: وقتی متدی، متد دیگری را صدا می زند، یعنی متدِ اولی به متدِ دومی وابسته است. مشکل اینجاست که این وابستگی در پیاده سازی پنهان شده و قابل رویت نیست. در نتیجه اگر کسی در کلاسی که ارث بری شده، متد اول را override کند، هیچ گاه نخواهد فهمید که باید متدِ دوم را صدا بزند. در نتیجه در پیاده سازی جدید، بعد از صدا زدن متدِ اول در کلاس پیاده سازی شده، سیستم در وضعیت پایدار نخواهد بود.

6. کلاس PersonManager متدی تک پارامتری virtual به نام Manage دارد که یک Person را دریافت می کند. کلاس های EmployeeManager و StudentManager را چگونه از کلاس PersonManager ارث بری کنیم، که متد به ارث برده شده و override شده Manage در آن ها به جای پارامتر Person، نوع متناظر Employee و یا Student را دریافت کند.
پاسخ:
https://stackoverflow.com/questions/12593082/c-sharp-override-method-with-subclass-parameter

7. چرا متد های virtual نباید در constructor صدا زده شوند؟
پاسخ:
https://stackoverflow.com/questions/119506/virtual-member-call-in-a-constructor

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