دوره های آموزشی آکادمی پی وی لرن (پروژه محور و ویژه بازار کار)



  • ۲۵
  • مرداد

جلسه ۵۰ : مفهوم همبستگی (Covariance) در #C

  • دسته‌بندی‌ها :
جلسه ۵۰ : مفهوم همبستگی (Covariance) در #C
    • جزئیات
    • نوع محتواآموزش تصویری

      مقدمه :

      با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن ، با یکی دیگر از جلسات دوره کامل آموزش #C در خدمت شما دوستان هستیم . در بخش قبلی با متغیرهای Nullable آشنا شدید ، در این بخش قصد داریم شما را با مفهوم همبستگی در #C یا Covariance در سی شارپ  آشنا کنیم. تا پایان این جلسه با ما همراه باشید.

      تعریف :

      کوواریانس و قراردادنویسی سلسله مراتب کلاس ها را تعیین می کند.

      قبل از اینکه در مورد کواریانس  و قراردادنویسی (contravariance) صحبت کنیم ، سلسله مراتب کلاس زیر را در نظر می گیریم:

      مثال : 

      همانطور که در مثال بالا مشخص است، کلاس small کلاس پایه برای big و big نیز یک کلاس پایه برای bigger است. نکته اینجا است که یک کلاس مشتق شده همیشه چیزی بیش از یک کلاس پایه دارد، بنابراین کلاس پایه نسبتا کوچکتر از کلاس مشتق شده است.

      حالا مقادیر زیر را در نظر بگیرید:

      خاصیت کوواریانس

      بدون خاصیت کوواریانس در خط آخر خطا خواهیم داشت

       

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

       

      کوواریانس در #C :

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

      کوواریانس (هم‌وردایی) یک توسعه‌ی چندریختی (Polymorfism) از آرایه‌ها،delegate ، و جنریک‌ها است و تبدیل مرجع ضمنی را برای آرایه‌ها، delegate  و پارامترهای نوع جنریک‌ ارائه می‌کند. هم‌وردایی باعث حفظ‌شدن سازگاری انتساب می‌شود.

      کوواریانس را می توان در delegate ،  generic ، آرایه، رابط و … اعمال کرد.

       

      کوواریانس با Delegate :

      کوواریانس در Delegate ها اجازه می دهد انعطاف پذیری در نوع بازگشتی از متدهای Delegate بیشتر باشد.

      مثال : 

      خروجی :

      مثال : 

      همانطور که در مثال بالا می بینید، delegate انتظار نوع بازگشتی small (کلاس پایه) را دارد، اما ما هنوز می توانیم Method1 را که بازگشتی Big(کلاس مشتق شده) است و همچنین Method2 را که در ساختار delegate است نشان دهیم .

      بنابراین، کوواریانس اجازه می دهد تا شما یک متد را به delegate اختصاص دهید که دارای نوع بدون بازگشتی مشتق شده است.

       

      Contravariane در #C :

      Contravariane به پارامترها اعمال می شود. Cotravariance اجازه می دهد تا یک متد با پارامتر یک کلاس پایه به delegate اختصاص داده شود که انتظار می رود پارامتر یک کلاس مشتق شده باشد.

      با ادامه مثال فوق، Method3 را که دارای نوع پارامتر دیگری از delegate است اضافه کنید:

      مثال : 

      خروجی :

      مثال : 

      همانطور که می بینید، Method3 دارای پارامتری از کلاس Small است در حالی که delegate انتظار یک پارامتر از کلاس Big را دارد. با این حال، می توانید از Method3 با delegate استفاده کنید.

      شما همچنین می توانید با استفاده از covariance و contravariance در متد مشابه زیر استفاده کنید :

      مثال : 

      خروجی :

      مثال : 

       

      مثالی دیگر از کوواریانس :

      یک کلاس والد مانند Animal را مانند زیر در نظر بگیرید:

      مثال : 

      کلاس فرزند را که از کلاس Animal ارث‌بری می‌کند با عنوان Dog را هم مانند زیر در نظر بگیرید :

      مثال : 

      حالا به طریق زیر می توانیم از این دو کلاس استفاده کنیم :

      مثال : 

      در مثال بالا سگ یک حیوان است ، پس میتوان از کلاس animal ارث بری کند.

      حالا به مثال زیر دقت کنید :

      مثال : 

      شی obAnimal در .NET نسخه‌ی ۳٫۵  خطا را برمی گرداند زیرا در این نسخه هموردایی (covariance) فعال نمی باشد ولی در نسخه NET 4. به بعد به طور خودکار خاصیت هموردایی فعالب بوده و کدهای بالا خطا نمی دهند.

       

      در این بخش با خاصیت هموردایی (covariance) در زبان #C آشنا شدید ، در بخش بعدی قصد داریم شما را با متغیر های نوع var در #C آشنا کنیم.

      QR:  جلسه ۵۰ : مفهوم همبستگی (Covariance) در #C
      به اشتراک بگذارید