PDA

View Full Version : کانورت کلاس ها در ارث بری



Boy_nn
سه شنبه 02 مهر 1392, 10:55 صبح
سلام دوستان
فرض کنیم کلاس child از کلاس parent ارث بری کرده باشه
حالا می خوام اطلاعات کلاس child در کلاس parent بریزم و یا برعکس
سوال من اینجاست راهی به جز کپی کردن این جور کلاسها برای انتقال اطلاعات وجود داره
یعنی بشه کلاس child رو به parent کانورت کنیم و برعکس

arash691
سه شنبه 02 مهر 1392, 11:28 صبح
سلام دوستان
فرض کنیم کلاس child از کلاس parent ارث بری کرده باشه
حالا می خوام اطلاعات کلاس child در کلاس parent بریزم و یا برعکس
سوال من اینجاست راهی به جز کپی کردن این جور کلاسها برای انتقال اطلاعات وجود داره
یعنی بشه کلاس child رو به parent کانورت کنیم و برعکس

وقتی که یک کلاس از کلاسی ارث بری میکند در واقع بخشی از اعضای تکمیل نشده ی خودش رو تکمیل می کند ... بنابراین چیزی که شما منظورتون هستش ( و یا ممکنه من بد فهمیده باشم ) امکان پذیر نخواهد بود ... اینکه بخواهیم اعضای کلاس مشتق درون کلاس پایه دوباره ریخته باشن نقضی هست بر عمل ارث بری ! و کل طراحی کلاس ها رو زیر سوال میبره ... بصورت خودکار اطلاعات کلاس پایه درون کلاس مشتق قرار میگیرد ( مگر در شرایطی که شما نقض ان را مشخص کرده باشید مانند سطح دسترسی خصوصی )

mehdi.mousavi
سه شنبه 02 مهر 1392, 11:34 صبح
سلام.
شما کلاس Child رو میتونید به Parent کست کنید، به بیان دیگه اگر کلاس های زیر رو در نظر بگیریم:


public class Parent
{
public int ParentProp { get; set; }
}

public class Child : Parent
{
public int ChildProp { get; set; }
}


در اینصورت:

Child c = new Child();
Parent p = (Parent)c;

کد صحیحی هستش. چون در واقع Child در وهله اول، خصوصیات Parent رو داره به ارث میبره. اما برعکسش خیر. یعنی شما نمی تونید یک Parent رو به Child کست کنید. چون مشخص نیست که اون Parent لزوما Child1 هستش، یا Child2 و ...

اما اگر این سوال رو برای Data Transfer Object ها می پرسید، میتونید از Framework هایی مثل AutoMapper و ... استفاده کنید تا Object ها رو به هم Convert کنید. دقت کنید، این دیگه Cast نیست. روش دیگه استفاده از Reflection هستش، یا Serialize کردن Parent به فرضا JSON Object و Deserialize کردن اون JSON Object به Child Object که خوب، توصیه می کنم از هر دو روش اخیر منصرف بشید.

موفق باشید.

Boy_nn
سه شنبه 02 مهر 1392, 12:18 عصر
وقتی که یک کلاس از کلاسی ارث بری میکند در واقع بخشی از اعضای تکمیل نشده ی خودش رو تکمیل می کند ... بنابراین چیزی که شما منظورتون هستش ( و یا ممکنه من بد فهمیده باشم ) امکان پذیر نخواهد بود ... اینکه بخواهیم اعضای کلاس مشتق درون کلاس پایه دوباره ریخته باشن نقضی هست بر عمل ارث بری ! و کل طراحی کلاس ها رو زیر سوال میبره ... بصورت خودکار اطلاعات کلاس پایه درون کلاس مشتق قرار میگیرد ( مگر در شرایطی که شما نقض ان را مشخص کرده باشید مانند سطح دسترسی خصوصی )
منظور من به ساخت کلاس نبود بلکه فقط کانورت کردن اطلاعات