الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

أمتى أستخدم new وامتى مستخدمهاش

مغلق
بدأه Samba في 22 ديسمبر 2005 · 8 رد · 1,102 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

ليا سؤال انا بعتبرة بسيط ويمكن تافة شوية

بس زى ما بيقولو باب النجار مخلع

سؤالى ببساطة امتى استخدم كلمة new عند تعريف متغير جديد

وامتى مستخدمهاش

يعنى مثلا لازم استخدم new عند تعريف نسخة من فورم موجوده

dim f1 as new form1

ياريت حد يوضحلى المعلومة دى فى السريع

أكون شاكر جدا جدا

مع تحياتى

#2

لاحظ معي أخي نقطة أن هذه الجملة:

Dim f1 as New Form1

عبارة عن جملتين وليست جملة واحدة،، لكنك تكتبها في جملة واحدة اختصارا.. والجملتين هما:

Dim f1 as Form1

وفي هذه أنت عرفت المتغير f1 وهو متغير من نوع Form1 لكنك إلى الآن ليس عندك Form1 حقيقي تتعامل معه،

وبعدها تأتي الجملة الثانية:

f1 = New Form1

وفي هذه الجملة في الأعلى يتم إضافة (New Form1) حقيقي إلى المتغير f1.

---------------------------------

لاحظ أمورا أخرى تستطيع أن تكتب مثل هذه الجملة:

New Form1

فقط!!!! لاحظ أننا أنشأنا Form1 جديد ولم نضفها إلى متغير حتى نتحكم فيه،، النافذة الآن تسبح لوحدها في الذاكرة!!

----------------------------

المثال الثاني يوضح أشياء أخرى:

عرفنا المتغير
Dim f1 as Form
صنعنا نافذة جديدة:
f1= New Form1
أظهرنا الشاشة
f1.Show
صنعنا نافذة أخرى:
f1 = New Form1
أظهر النافذة الجديدة:
f1.Show

أصبح لدينا نافذتين من نفس البرنامج!!

مثال آخر:

Dim f1 as Form1
هذا سينتج خطأ:
f1.Show

سينتج خطأ لأنه ليس عندك نافذة حقيقية، والمتغير f1 يساوي Null!!

نوع الخطأ هو NullRefferenceException

أرجو أن يكون هذا مفيدا

تم تعديل هذه المشاركة بواسطة أبومازن في 22 ديسمبر 2005 في 06:33

#3

تماما مثل ما قال الا ابو مازن

ودعني اوضح شوي اكتر

تستخدم كلمة new غالبا مع الclass (مع العلم ان الفورم اصلا هيه class)

وغالبا ال class لا يتم استخدامها مباشرة ولكن يتم استدعاء نسخة منها للتعامل معها.

لانك لو استعديت الكلاس مباشرة لن تستطيع ان تتعامل مع معطياتها اما لو سويت نسخة منها سوف تستطيع

دعني اضرب لك مثال

لو انشئت انت كلاس ووضعت فيها مجموعة funcctions او sub

وحاولت استدعاءها بشكل مباشر سوف تجد ان الfunctions و sub لن تظهر لك في خصائص الكلاس وما يظهر هو الخصائص المشتركة بين كل الكلاسات

ولو وضعت الان new سوف تجد ان كل خصائص الكلاس ظهرت.

طبعا هذا يوفر في كمية استهلاك الذاكرة فتخيل انك عندما تشغل البرنامج تشتغل كل خصائص الكلاس فستصبح الذاكرة مستهلكة بكمية كبيرة دون فائدة

ولذلك ننشيء نسخة منها عند الحاجة

طبعا هذا حسب فهمي واتمنى ان تكون وصلت الصورة

<span style='color:green'>سؤل ابن عباس عن علمه كيف جمعه فقال :( أوتيت لسانا سؤولا وقلبا عقولا)</span>

#4

انا لاضيف على ماقاله الاخوه ولكن

تستخدم مع الclass دائما

new =constractor

اذا كنت قد تعاملت مع اي برنامج من نوع OOP فهي نفس الشي

ولكن الOOP جديده على الفيجوال بيسك دوت نت لانها لم تكن موجوده قبل الدوت نت

مثال:

عندما تعرف

dim x as form1

هذا تعريف فقط ولايحجز مساحة في الmemory

اما عندما تستخدم الnew

dim x as new form1

فهذا يعني ان المتغيرx حجز مساحة من الmemory

وشكرا

اذا اردت معرفة المزيد عن هذا الموضوع يفضل مراجعةالOOP وقراءة مواضيع عن الconstractor

سوف تجد امثله عديده توضح الموضوع

#5

هذا مثال جميل ركز في الاسطر الملونه فقط

Dim strSQL As String

Dim objItem As ListItem

' Samenstellen SQL-statement

strSQL = "select CategorieNaam from tblCategorie"

' Opbouwen SQLDataReader op basis van query

Dim connstr As String = "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" & Server.MapPath("dbImages.mdb")

Dim cnn As New OleDbConnection(connstr)

Dim cmd As New OleDbCommand(strSQL, cnn)

cnn.Open()

Dim dr As OleDbDataReader = cmd.ExecuteReader

If dr.Read = Nothing Then

Exit Sub

End If

While dr.Read

'Creeer en vul ListItem

objItem = New ListItem()

objItem.Text = dr.Item("CategorieNaam")

Me.cboCategorie.Items.Add(objItem)

End While

cnn.Close()

cnn.Dispose()

هنا قمنا بتعريف obkect list مجرد تعريف ولكن لم نقم بانشاء المتغير

بعدها وضعنا جملة الif

في حالة كان هناك قيم مسترده من ال DB

قم انشاء الobject

وذلك باستخدام الNew

لانه اذا لم يكن هناك نتيجة مسترده من الDBفلاداعي لبناء المتغير لانه سوف يحجز مكان في الذاكرة

وشكرا

تم تعديل هذه المشاركة بواسطة walcom في 22 ديسمبر 2005 في 17:19

#6

السلام عليكم

تستخدم new فى حالة وجود constructor لى class اما لو كان shared class لا تستخدم كلمة new

مثال class messagebox يعتبر shared class فى حالة استخدام هذا الكلاس لا تستخدم new

يمكن استخدام class بشكل مباشر messgebox.show

او عمل

dim mg as messgebox

mg.show

ممكن

dim mg as new messagebox

mg.show

لا يمكن

والله اعلم

{وَاتَّقُواْ يَوْمًا تُرْجَعُونَ فِيهِ إِلَى اللّهِ ثُمَّ تُوَفَّى كُلُّ نَفْسٍ مَّا كَسَبَتْ وَهُمْ لاَ يُظْلَمُونَ} (281) سورة البقرة

br17.gif

برنامج الإتصلات الإدارية والارشيف الالكتروني

برنامج الخبير لنقاط البيع المباشرة

#7

ايضا بعض الفئات يكون الـconstructor فيها Private ولا يمكن انشاء كائن منها مباشرة

مثل DataRow

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#8

مش عارف اشكركمازاى يا جماعة

بجد شكرا جزيلا

ونخدمكم فى الافراح إن شاء الله

مع تحياتى الى كل من ساهم برد على الموضوع

#9

بارك الله فيكم

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…