![]() |
|
[سؤال] ما الفرق بين ال Classes و Structures - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم لغة السي شارب C#.NET (http://vb4arb.com/vb/forumdisplay.php?fid=175) +--- قسم : قسم اسئلة C#.NET (http://vb4arb.com/vb/forumdisplay.php?fid=176) +--- الموضوع : [سؤال] ما الفرق بين ال Classes و Structures (/showthread.php?tid=17375) الصفحات:
1
2
|
ما الفرق بين ال Classes و Structures - نور الدين وليد - 20-09-16 السلام عليكم ورحمة الله وبركاته حياكم الله اخوانى الكرام أريد معرفة ما هو الفرق بين Class و Struct ؟! يعنى متى أستخدم هذه ومتى الأخرى وياريت مثال يوضح الفكرة وجزاكم الله خيرا،،، RE: ما الفرق بين ال Classes و Structures - Fantastico - 20-09-16 عليكم السلام أخي الاجابة تتلخص كالأتي : الكلاس من النوع المرجعي والتركيب من النوع القيمي أي أن الكلاس يتم خزنه في الذاكرة بشكل مؤشرات فقط والتركيب يتم خزن قيمته معه لذلك تكون الكلاس خفيفة الحمل على الحاسوب ولا تتكرر البيانات المخزونه في الذاكرة لذلك لن يكون هنالك اسراف في استخدام الرام لكن التركيب Structure وكل الانواع ذوات القيمة الأخرى تعتبر أسرع لذلك انصحك عندما يكون النوع الذي انت بصدد تصميمه يتم تداوله وتناقله كثيرا في البرنامج ان تستخدم الفئات وتستخدم التراكيب عندما تكون المعلومات المحفوظة بداخله بسيطة وقيمية غير مرجعية فهم هذا الفرق الجوهري مهم جدا يمكنك تصفح الانترنت حول موضوع value type and reference type كما ان التراكيب لا تمتلك قابلية الوراثة وشكرا RE: ما الفرق بين ال Classes و Structures - نور الدين وليد - 20-09-16 جزاك الله خيرا . ![]() ولكن لم أفهم متى استخدم هذه ومتى تلك؟ ممكن مثال يوضح الفكرة. RE: ما الفرق بين ال Classes و Structures - Abu Ehab - 21-09-16 السلام عليكم نعنم ... كلام أ الاستاذ صحيح Structs are value types Classes, are reference types اعطيك مثال : كود : struct TotalCostتتعامل معاه :; كود : TotalCost totalCost = new TotalCost(10, 19);RE: ما الفرق بين ال Classes و Structures - Fantastico - 21-09-16 يمكنك استخدام الفئات دائما فهي تغطي جميع المميزات تقريبا RE: ما الفرق بين ال Classes و Structures - الشاكي لله - 22-09-16 متى تستخدم الـ Sturct بالنسبة لي اعتبر الـ Struct مجرد حاوية لبعض القيم من صنف واحد ، لا اكثر مثال 1 : نعرف ان الفضاء الثلاثي الابعاد لديه 3 محاور : اذن لو اردنا وصف نقطة في هذا المجال في برنامجنا وعرضها على الشاشة مقلا ، نستطيع عمل 3 متغيرات عادية بهذا الشكل : PHP كود : int x = 2;قد يقول البعض سأستعمل المصفوفات ، ولكن المصفوفات مجرد حل فاشل هو الاخر لانها لم تخصص للتعامل مع هذا الاسلوب. الحل المثالي ، استعمال انشاء struct : PHP كود : struct Vector3Dالان يمكننا وصف النقطة وعرضها بدون عمل متغيرات : PHP كود : Vector3D vector = new Vector3D(2, 3, 4);اذن كما تلاحظ جمعنا قيم من نفس الصنف في Type واحد وهذه فائدة عظيمة ، هل هذا كل شيئ ؟؟؟؟ لا ... انظر لهذا السطر كم هو قبيح : PHP كود : MessageBox.Show(vector.x.ToString() + vector.y.ToString() + vector.z.ToString()); هل يمكننا عمل امر بخصوص هذا الموضوع ، نعم يمكنك عمل override للدالة ToString وتجعلها كالتالي مثلا :- PHP كود : struct Vector3Dالان عند العرض :- PHP كود : Vector3D vector = new Vector3D(2, 3, 4);كم هذا مريح ، وهل هذا كل شيئ ، لاااا تستطيع اضافة عمليات تختص بالVector داخل الstructمثلا عملية جمع كائنين من 2 vectors PHP كود : struct Vector3Dيمكننا ايضا اضافة احدى العمليات الحسابية التي تتعلق بالVectors مثلا حساب الـ Magnitude : PHP كود : public static Vector3D operator+ (Vector3D a , Vector3D b)وفي النهاية : PHP كود : Vector3D vector = new Vector3D(2, 3, 4);---- مثل ماتلاحظ قمنا بعمل Type احترافي للـ Vector من الـ Struct طبعا هذا لايعني انه لايمكننا عمله باستعمال الـ Class ولكن الطريقة الامثل اكيد باستعمال الـ Struct اساسا لو استعملنا الـ Class بتواجهنا الطامة الكبرى بخصوص عملية الـ Assignment وذلك بسبب ان الـ Class هو Reference Type هل تريد ان تعرف المشكلة التي ستحصل لو استعملنا الـ Class ؟؟؟ بافتراض حولنا الstruct الذي انشاناه الى class : PHP كود : class Vector3Dثم حاولنا كتابة التالي : PHP كود : Vector3D vector = new Vector3D(2, 3, 4);الرسالتين اعلاه سيطبعان نفس النتيجة !!!!!!!!!!!!!!!!!!!! يالها من فاجعة .... كيف ذلك !! فكما نلاحظ لم يتم العبث في قيمة الكائن vector2 ، بل تم التعديل على الكائن vector اذن مادخل الكائن المسكين vector2 في الموضوع . هل فقط لانه استعار القيمة الابتداية من الكائن vector !!! ياللظلم نعم هذه طبيعة عمل الClass ، فهو كالـ Pointers .. مما يعني انه اي تعديل على احد الكائئنات التي تم عمل Assignment لها ، راح يغير على الكائنات الاخرى . فالان لو فقط ارجعنا الـ class الى struct PHP كود : struct Vector3Dلن تكون هناك المشكلة التي ناقشناها بالاعلى ، فكل كائن يشير الى نفسه PHP كود : Vector3D vector = new Vector3D(2, 3, 4);هذا هو الفرق التقني الكبير بين الـ Struct وبين الـ Class -- وكما قلت سابقا ، نستعمل الـ Sturct عندما تكون لدينا عدة قيم بسيطة من نفس الصنف مثلا الـ Time يحتوي على ساعة ودقائق وثواني ، لذلك نعرفه Struct مثلا الـ Size يحتوي على محور سيني ومحور صادي ، لذلك نعرفه Struct مثلا الـ Address يحتوي على عدة ارقام او نصوص، لذلك نعرفه Struct مثلا الـ Range يحتوي على رقم بداية ونهاية، لذلك نعرفه[b]Struct[/b] مثلا المستطيل (Rectangle) يحتوي على 4 قيم من نفس النوع ، يمكننا تعريفه كـ Struct وفي نفس الوقت يمكننا تعريف الـ Rectangle مثلا كـ Class في حالة كان الاستخدام معقدا مثلا لو عرفنا الـ Rectangle كـ Struct ثم اضفنا فيه اكواد لعمليات الرسم بالGDI والطباعة وغيرها من الامور التي تتعامل مع Unmanaged Resources اعتقد تصبح مشكلة وقد يحصل كراش ايضا ، لذلك اي Type تريد استخدامه كـ (سلاح ثقيل) استعمل الـ Class اما (الاسلحة الخفيفة) مثل العمليات الحسابية والتحويلات وغيره استعمل الـ Struct واهم شيئ ، لاتنسى موضوع الـ Value Type الذي وضحته بالاعلى تحياتي RE: ما الفرق بين ال Classes و Structures - silverlight - 22-09-16 اخي الفاضل الشاكي لله كلامك جيد جدا ............. لكن فعليا لايوجد فارق كبير بين Structure و Class إلا في الأفضلية للإستخدام مع ٌValueType و Ref Type وأكاد اجزم انه لا يوجد فارق علي الإطلاق الأمر كله مرتبط بأسلوب كتابة الكود الخاص بأي Structure و اسمح لي أن اقبتس من كلامك الأتي تحديدا إقتباس :يالها من فاجعة .... كيف ذلك !! اعتقد ان اسلوب كتابة Structure الخاص بك هو ما يؤثر في عملية Clone حاول تعيد كتابة Structure بهذا الشكل PHP كود : Public Structure Vector3Dثم حاول صياغة الكود الخاص بك مرة اخري ليكون هكذا PHP كود : Dim v As Vector3D = New Vector3D With {.X = 100, .Y = 200, .Z = 300}تقبل تحياتي و عذرا لكتابة الكود بلغة VB.net RE: ما الفرق بين ال Classes و Structures - نور الدين وليد - 23-09-16 جزاك الله خيرا أستاذ الشاكي لله شرحك كان أكثر من رائع... ![]() ولكن الاستاذ Silverlight لم أفهم قصدك ![]() (20-09-16, 01:03 PM)Fantastico كتب : لذلك تكون الكلاس خفيفة الحمل على الحاسوب ولا تتكرر البيانات المخزونه في الذاكرة لذلك لن يكون هنالك اسراف في استخدام الرامكيف الكلاس خفيفة واخف من التركيب على الذاكرة وفى نفس الوقت التركيب اسرع
RE: ما الفرق بين ال Classes و Structures - الشاكي لله - 23-09-16 (22-09-16, 05:38 PM)silverlight كتب : اخي الفاضل الشاكي لله اهلا بك اخي سيلفرلايت (ارجو ان اتعرف على اسمك) ![]() يبدو انك تسرعت اخي العزيز لان ببصراحة اختلف معك جدا ، هناك عدة اختلافات او بالاحرى (limits) لاستخدام الـ Struct بعيدا عن موضوع الـ Ref & Value Type ، هناك عدة اختلافات من ناحية مبادئ الـ OOP 1- عدم قدرة الـ Struct من الوراثة من الـ Types الاخرى (ماعدا الـ Interface) 2- عدم قدرة الـ Struct على انشاء Contractor بدون بارمترات 3- عند تعريف متغيرات او خصائص عامة في الـ Struct ـ يجب عليك ملأها من الـ Contractor ولايمكنك اسناد قيمة افتراضية لهم مباشرة 4- عدم تقبل كائن الـ Struct الى القيمة null او nothing (فيجوال بيسك) هذه الفروق وحدها تجعل الفارق ليس بالصغير بين الـ Class والـ Struct RE: ما الفرق بين ال Classes و Structures - silverlight - 23-09-16 أخي الفاضل الشاكي لله اولا : أعلم جيدا الفارق بين Structure و Class و أفهم فكرة التوريث جيدا لكن ........................... مثلا الغالبية تقول ان Structure يتم استخدامه مع ValueTypes لذلك ارجو منك ان تلقي نظرة علي الكود التالي فهو يغير قليلا من المفاهيم الخاصة بكل من Structure و Class و عفوا مرة ثانية لإستخدامي لغة الفيجوال بيسك دوت نت بدلا من #C PHP كود : Public Structure CairoStringالإستخدام ........ PHP كود : Dim cs As New CairoString("VB4Arab")ما أريد ان أقوله أنه تقريبا لا يوجد فارق كبير بين كل من Structure و Class الأمر فقط متروك للمبرمج الذي يكتب الكود و في الكيفية التي سيستخدمها المبرمج لكتابة الكود و كتابة البيانات في كل من Structure و Class و أخيرا هذا اثبات بسيط أن مايكروسوفت أحيانا ب تقول اي كلام في اي كلام أليك هذه المعادلة العجيبة ........... او كما نقول في مصر إليك هذه الفزورة String أصله Char و ........ Char أصله Structure تقبل تحياتي ................ بالمناسبة اسمي : مهندس عمر
|