حياة

كل شيء عن التسلسل في Visual Basic

كل شيء عن التسلسل في Visual Basic



We are searching data for your request:

Forums and discussions:
Manuals and reference books:
Data from registers:
Wait the end of the search in all databases.
Upon completion, a link will appear to access the found materials.

التسلسل هو عملية تحويل كائن إلى تسلسل خطي من وحدات البايت يسمى "دفق البايت". إلغاء التسلسل يعكس العملية. ولكن لماذا تريد تحويل كائن إلى دفق بايت؟

السبب الرئيسي هو أنه يمكنك تحريك الكائن. النظر في الاحتمالات. نظرًا لأن "كل شيء كائن" في .NET ، يمكنك إجراء تسلسل لأي شيء وحفظه في ملف. لذلك يمكنك إجراء تسلسل للصور وملفات البيانات والحالة الحالية لوحدة البرنامج (يشبه "الحالة" لقطة من برنامجك في وقت ما حتى تتمكن من إيقاف التنفيذ مؤقتًا والبدء من جديد لاحقًا) ... كل ما عليك القيام به.

يمكنك أيضًا تخزين هذه الكائنات على القرص في ملفات ، وإرسالها عبر الويب ، ونقلها إلى برنامج آخر ، والاحتفاظ بنسخة احتياطية للسلامة أو الأمان. الاحتمالات لا حصر لها حرفيا.

هذا هو السبب في أن التسلسل هو عملية أساسية في .NET و Visual Basic. يوجد أدناه قسم عن التسلسل المخصص عن طريق تطبيق ISerializable واجهة والترميز أ الجديد و GetObjectData روتين.

كمثال أول للتسلسل ، فلننفذ أحدًا من أسهل البرامج ، ولكن أيضًا أحد أكثر البرامج فائدة: إجراء تسلسل للبيانات ، ثم إلغاء تسلسل البيانات في فئة بسيطة من وإلى ملف. في هذا المثال ، لا يتم تسلسل البيانات فقط ، ولكن يتم حفظ بنية البيانات أيضًا. يتم الإعلان عن الهيكل هنا في وحدة نمطية للحفاظ على الأشياء ... بشكل جيد ... منظم.

وحدة SerializeParms
ParmExample فئة عامة
Parm1Name العام باسم سلسلة = "اسم Parm1"
Parm1Value العام كـ عدد صحيح = 12345
Parm2Name العامة باسم سلسلة
Parm2Value العامة كـ عشري
نهاية الدرجة
نهاية الوحدة

ثم ، يمكن حفظ القيم الفردية في ملف مثل هذا:

الواردات System.Runtime.Serialization.Formatters.Binary
نظام الواردات
الدرجة العامة Form1
Sub Sub mySerialize_Click (_
ByVal المرسل باسم System.Object ، _
ByVal e As System.EventArgs) _
يعالج mySerialize.Click
خافت ParmData كما ParmExample جديد
ParmData.Parm2Name = "اسم Parm2"
ParmData.Parm2Value = 54321.12345
Dim s As New FileStream ("ParmInfo"، FileMode.Create)
خافت و كما BinaryFormatter جديدة
f. تسلسل (s ، ParmData)
s.Close ()
نهاية الفرعية
نهاية الدرجة

وهذه القيم نفسها يمكن استرجاعها مثل هذا:

الواردات System.Runtime.Serialization.Formatters.Binary
نظام الواردات
الدرجة العامة Form1
Sub Sub myDeserialize_Click (_
ByVal المرسل باسم System.Object ، _
ByVal e As System.EventArgs) _
يعالج myDeserialize.Click
Dim s = New FileStream ("ParmInfo" ، FileMode.Open)
خافت و كما BinaryFormatter جديدة
Dim RestoredParms باسم ParmExample جديد
RestoredParms = f.Deserialize (s)
s.Close ()
Console.WriteLine (RestoredParms.Parm1Name)
Console.WriteLine (RestoredParms.Parm1Value)
Console.WriteLine (RestoredParms.Parm2Name)
Console.WriteLine (RestoredParms.Parm2Value)
نهاية الفرعية
نهاية الدرجة

ا بناء أو مجموعة (مثل ArrayList) بدلا من صف دراسي يمكن أيضا أن تكون متسلسلة إلى ملف بنفس الطريقة.

الآن وبعد أن تخطينا عملية التسلسل الأساسية ، دعونا نلقي نظرة على التفاصيل المحددة التي تشكل جزءًا من العملية في الصفحة التالية.

واحدة من أول الأشياء التي يجب أن تلاحظها حول هذا المثال هو السمة في صف دراسي. السمات هي مجرد مزيد من المعلومات التي يمكنك توفيرها لـ VB.NET حول كائن ويتم استخدامها للعديد من الأشياء المختلفة. تخبر السمة الموجودة في هذا الرمز VB.NET بإضافة رمز إضافي بحيث يمكن إجراء تسلسل لكل شيء في هذه الفئة لاحقًا.

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

Parm3Value عام مثل سلسلة = "مهما"

في المثال ، لاحظ أن ذلك تسلسل و إلغاء تسلسل هي طرق لل BinaryFormatter موضوع (F في هذا المثال).

f. تسلسل (s ، ParmData)

هذا الكائن يأخذ تيار ملف الكائن والكائن المراد تسلسله كمعلمات. سنرى أن VB.NET يقدم كائنًا آخر يسمح بالتعبير عن النتيجة كـ XML.

وملاحظة أخيرة ، إذا كان الكائن الخاص بك يحتوي على كائنات تابعة أخرى ، فسيتم تسلسلها أيضًا! لكن منذ الكل الكائنات المتسلسلة يجب أن تكون علامة مع السمة ، يجب تمييز كل هذه الكائنات الفرعية بهذه الطريقة أيضًا.

لمجرد أن تكون واضحًا تمامًا بشأن ما يحدث في البرنامج ، فقد ترغب في عرض الملف المسمى ParmData في المفكرة لمعرفة شكل البيانات المتسلسلة. (إذا اتبعت هذا الرمز ، فيجب أن يكون في bin.Debug المجلد في مشروعك.) نظرًا لأن هذا هو ملف ثنائي ، فإن معظم المحتوى ليس نصًا قابلاً للقراءة ، ولكن يجب أن تكون قادرًا على رؤية أي سلاسل في ملفك المسلسل. سنفعل إصدار XML بعد ذلك وقد ترغب في مقارنة الاثنين لمجرد إدراك الفرق.

يتطلب إجراء تسلسل إلى XML بدلاً من ملف ثنائي تغييرات قليلة جدًا. XML ليس بالسرعة ولا يمكنه التقاط بعض معلومات الكائن ، لكنه أكثر مرونة. يمكن استخدام XML عن طريق أي تقنية برامج أخرى في العالم اليوم. إذا كنت تريد أن تتأكد من أن هياكل ملفاتك لا "تربطك بـ" Microsoft ، فهذا خيار جيد للنظر فيه. تشدد Microsoft على "LINQ to XML" لإنشاء ملفات بيانات XML في أحدث تقنياتها ولكن لا يزال الكثير من الناس يفضلون هذه الطريقة.

يشير الحرف "X" في XML إلى eXtensible. في مثال XML الخاص بنا ، سنستخدم أحد امتدادات XML ، وهي تقنية تسمى صابون. كان هذا يعني "بروتوكول الوصول إلى الكائنات البسيطة" ولكنه الآن مجرد اسم. (تم ترقية SOAP كثيرًا بحيث لم يعد الاسم الأصلي مناسبًا تمامًا بعد الآن.)

الشيء الرئيسي الذي يجب أن نغيره في روتيننا الفرعي هو إزالة منسق التسلسل. يجب تغيير هذا في كل من الروتين الفرعي الذي يقوم بإجراء تسلسل للكائن وتلك التي تقوم بإلغاء تسلسلها مرة أخرى. بالنسبة للتكوين الافتراضي ، يتضمن هذا ثلاثة تغييرات في البرنامج. أولاً ، عليك إضافة مرجع إلى المشروع. انقر بزر الماوس الأيمن فوق المشروع وحدد يضيف مرجعا… . تأكد…

System.Runtime.Serialization.Formatters.Soap

... تمت إضافته إلى المشروع.

ثم قم بتغيير العبارتين في البرنامج الذي يشير إليه.

واردات System.Runtime.Serialization.Formatters.Soap
قاتمة و SoapFormatter جديدة

هذه المرة ، إذا كنت تحقق من نفسه ParmData ملف في المفكرة ، سترى أن كل شيء في نص XML قابل للقراءة مثل ...

اسم Parm1
12345
الاسم Parm2
54321.12345

هناك أيضًا الكثير من XML الإضافي الذي يعد ضروريًا لمعيار SOAP في الملف أيضًا. إذا كنت تريد التحقق من ما السمة تفعل ذلك ، يمكنك إضافة متغير بهذه السمة وإلقاء نظرة على الملف للتحقق من عدم تضمينه.

المثال الذي قمنا بترميزه فقط هو البيانات التسلسلية ، ولكن لنفترض أنك بحاجة إلى التحكم في كيفية إجراء تسلسل البيانات. VB.NET يمكن أن تفعل ذلك أيضا!

لتحقيق ذلك ، تحتاج إلى أن تعمق مفهوم التسلسل قليلاً. يحتوي VB.NET على كائن جديد للمساعدة هنا: SerializationInfo. على الرغم من أن لديك القدرة على ترميز سلوك التسلسل المخصص ، إلا أنه يأتي مع تكلفة ترميز إضافي.

الأساسية إضافي يظهر رمز أدناه. تذكر ، يتم استخدام هذه الفئة بدلا من ParmExample الطبقة المعروضة في المثال السابق. هذا ليس مثالا كاملا. الغرض من ذلك هو عرض الرمز الجديد المطلوب للتسلسل المخصص.

نظام الواردات. وقت التشغيل
_
الطبقة العامة CustomSerialization
تنفذ ISERializable
البيانات المتسلسلة هنا
'التسلسل العام متغير كنوع
عام جديد ()
منشئ افتراضي عند الفصل
'تم إنشاؤه - يمكن أن يكون الرمز المخصص
وأضاف هنا أيضا
نهاية الفرعية
عام فرعي جديد (_
ByVal info As SerializationInfo، _
سياق ByVal باسم StreamingContext)
تهيئة متغيرات البرنامج من
متجر بيانات متسلسل
نهاية الفرعية
GetObjectData العامة العامة (_
ByVal info As SerializationInfo، _
سياق ByVal باسم StreamingContext) _
تنفذ ISerializable.GetObjectData
تحديث مخزن البيانات المتسلسل
من متغيرات البرنامج
نهاية الفرعية
نهاية الدرجة

والفكرة هي أنه يمكنك الآن (وفي الحقيقة ، يمكنك ذلك) يجب) القيام بكل من تحديث وقراءة البيانات في مخزن البيانات التسلسلي في الجديد و GetObjectData الوظائف الفرعية. يجب عليك أيضا تضمين عام الجديد مُنشئ (لا توجد قائمة معلمات) لأنك تنفذ واجهة.

عادة ما يكون للصف خصائص وطرق رسمية مشفرة كذلك ...

الملكية العامة
newPropertyValue As String الخاص
الملكية العامة NewProperty () كسلسلة
احصل على
إرجاع newPropertyValue
نهاية الحصول على
تعيين (قيمة ByVal كسلسلة)
newPropertyValue = القيمة
مجموعة النهاية
نهاية الملكية
الطريقة العامة
الجمهور MyMethod ()
رمز الطريقة
نهاية الفرعية

يمكن للفئة المتسلسلة الناتجة إنشاء قيم فريدة في الملف بناءً على الكود الذي توفره. على سبيل المثال ، قد تقوم الفئة العقارية بتحديث قيمة وعنوان المنزل ولكن الفئة ستقوم بإجراء تسلسل لتصنيف السوق المحسوب أيضًا.

ال الجديد سوف الروتين الفرعي تبدو مثل هذا:

عام جديد (_)
ByVal info As SerializationInfo، _
سياق ByVal باسم StreamingContext)
تهيئة متغيرات البرنامج من
متجر بيانات متسلسل
Parm1Name = info.GetString ("a")
Parm1Value = info.GetInt32 ("b")
"تابع جديد ...

متى إلغاء تسلسل يسمى على BinaryFormatter كائن ، يتم تنفيذ هذا الفرعية و SerializationInfo يتم تمرير الكائن إلى الجديد روتين. يمكن لـ New بعد ذلك القيام بكل ما هو ضروري مع قيم البيانات المتسلسلة. فمثلا…

MsgBox ("هذا هو Parm1Value Times Pi:" _
& (Parm1Value * Math.PI). ToString)

العكس يحدث عندما تسلسل يسمى ، ولكن BinaryFormatter وجوه يدعو GetObjectData في حين أن.

GetObjectData العامة العامة (_
ByVal info As SerializationInfo، _
سياق ByVal باسم StreamingContext) _
تنفذ ISerializable.GetObjectData
تحديث مخزن البيانات المتسلسل
من متغيرات البرنامج
إذا Parm2Name = "اختبار" ثم
info.AddValue ("a" ، "هذا اختبار.")
آخر
info.AddValue ("a" ، "No test this time.")
إنهاء إذا
info.AddValue ("b" ، 2)

لاحظ أنه يتم إضافة البيانات إلى الملف المتسلسل كأزواج اسم / قيمة.

يبدو أن الكثير من صفحات الويب التي وجدتها في كتابة هذا المقال لا تحتوي على كود فعلي. يتساءل المرء عما إذا كان المؤلف قد نفذ أي كود بالفعل قبل كتابة المقال في بعض الأحيان.


شاهد الفيديو: Learn Visual Basic in Arabic #141 - VB NET سحب و افلات ملف نصي drag drop text file تعليم فيجوال بيسك (أغسطس 2022).

Video, Sitemap-Video, Sitemap-Videos