‏إظهار الرسائل ذات التسميات Tips And Tricks. إظهار كافة الرسائل
‏إظهار الرسائل ذات التسميات Tips And Tricks. إظهار كافة الرسائل

الأربعاء، ٤ يونيو ٢٠٠٨

الفرق بين const و static readonly

لو كنت قد جربت التعامل مع الثوابت بكثرة ، فلا بد انك تساءلت ، ما هو الفارق بين تعريف ثابت const او تعريفه باستخدام static readonly ، فكلاهما كما تعلم لا يمكن تغيير قيمتهما .

الفارق بسيط جداً ، هو ان ال const يتم تعريف قيمتها وقت ال compile time ، اما قيمة ال static readonly فيتم تعريفها وقت ال run time .

لهذا سنجد مزية اضافية لل static readonly ، وهو اننا يمكن ان نقوم بتعريفة في ال static constructor بالشكل التالي مثلاً :

 

class Program
    {
        public static readonly Test test = new Test();
        static void Main(string[] args)
        {
            test.Name = "Program";
}

 

Read More......

الفرق بين التعريف باستخدام overridde و new

من المبادئ العامة في ال OOP استخدام مفهوم ال override ، في برامجك من خلال .net يمكنك تحديد الدالة لتكون قابلة لعمل override لها لاحقاً بالشكل التالي :

C#:

public class Base
{
    public virtual void SomeMethod()
    {
    }
}

 

vb.net:

Public Class Base
    Public Overridable Sub SomeMethod()
    End Sub
End Class

 

ومن ثم لعمل override لهذه الدالة في فئة Class آخر نقوم بكتابة الكود التالي :

C#:

public class Derived : Base
{
    public override void SomeMethod()
    {
    }
}

 

vb.net:

Public Class Derived
    Inherits Base
    Public Overloads Overrides Sub SomeMethod()
    End Sub
End Class

 

في هذه الحالة لو قمنا بتعريف نسخة من الفئة الأولى Base وقمنا بعملها من النوع  Derived فسيتم تنفيذ الدالة الموجودة في Derived مباشرة :

C#:

Base b = new Derived();
b.SomeMethod();

vb.net:

Dim b As Base = New Derived()
b.SomeMethod()

 

التعريف باستخدام new أو Shadows :

اما لو قمنا بتعريف ال  override باستخدام new أو Shadows في vb.net فكل ما سيحدث هو عملية اخفاء مؤقت hide ، لذا فإن الأمر التالي مثلاً :

C#:

public class Base
{
    public virtual void SomeOtherMethod()
    {
    }
}

public class Derived : Base
{
    public new void SomeOtherMethod()
    {
    }
}

Base b = new Derived();
Derived d = new Derived();
b.SomeOtherMethod();
d.SomeOtherMethod();

vb.net:

Public Class Base
    Public Overridable Sub SomeOtherMethod()
    End Sub
End Class

Public Class Derived
    Inherits Base
    Public Shadows Sub SomeOtherMethod()
    End Sub
End Class

Dim b As Base = New Derived()
Dim d As New Derived()
b.SomeOtherMethod()
d.SomeOtherMethod()

سوف يقوم باستدعاء الدالة الأولى في السطر الثالث ، فيما يقوم باستدعاء الدالة الثانية فقط في السطر الرابع .

المصدر :
http://blogs.msdn.com/csharpfaq/archive/2004/03/12/88453.aspx

Read More......

الأحد، ٢٣ مارس ٢٠٠٨

StringBuilder

بسم الله الرحمن الرحيم .
السلام عليكم ورحمة الله وبركاته .


عندما نقوم بدمج النصوص ، يلجأ الكثيرون منا لاستخدام المعامل + في C# أو المعامل & في VB.net بالشكل التالي - مثال اضافة امتداد البريد الإلكتروني :

//C#:
Label1.Text = Text1.Text + "@hotmail.com";

'VB.net:
Label1.Text = Text1.Text + "@hotmail.com";

إلا أن Visual Studio قدمت لنا طريقة أخرى لدمج النصوص باستخدام الفئة StringBuilder ، في مجال الأسماء System.Text.StringBuilder ، يمكن استخدامها لدمج النصوص بالشكل التالي :

//C#:
System.Text.StringBuilder mail = New System.Text.StringBuilder(Text1.Text);
mail.Append("@hotmail.com");

'VB.net:
Dim mail As New System.Text.StringBuilder(Text1.Text)
mail.Append("@hotmail.com")

الفارق بين الاثنين يكمن في ان stringbuilder يظل كما هو منذ لحظة انشاءه ، اما استخدام المعاملات + أو & فهو يقوم بعمل Object جديد من ال String مع كل عملية دمج .
والآن سنفترض مثال Loop تقوم بدمج عدد من النصوص ، وسنصور المقارنة مباشرة من كتاب .Net Gotachas ، حيث قام بعمل اختبار لعدد عمليات دمج ابتداء من 10 عمليات دمج وحتى 1000000 عملية دمج ، وقام بمقارنة الأداء بين استخدام StringBuilder او استخدام معاملات الدمج التقليدية ، مع ذكر زمن التنفيذ بالثانية لكل منهم .

لا تنسى ان 3562.933 ثانية تعني 59.4 دقيقة تقريباً ...
والآن ... هل ما زلت تستخدم & او + لدمج النصوص ؟؟؟


توفر الفئة stringbuilder ايضاً عمليات استبدال Replace وادراج Insert وحذف Remove وعمليات نصوص أخرى كثيرة ، يمكنك الاطلاع على أوجه كثيرة للمقارنة مدعومة بالرسوم البيانية من خلال هذا الرابط من Code Project :
http://www.codeproject.com/KB/cs/StringBuilder_vs_String.aspx

والله الموفق ...
والسلام عليكم ورحمة الله وبركاته .

Read More......

الاثنين، ١٨ فبراير ٢٠٠٨

مشكلة متكررة مع الباركود

ملحوظة ضئيلة عادة ما تنسى سهوا عند التعامل مع الباركود (بالخطوط مثل : "3 من 9 مدد" ، الخ) هي كتابه النص الباركود بين قوسين او العلامات النجميه كما في:

myLabel.Text = "*"+myBarcode+"*";

او

myLabel.Text = "("+myBarcode+")";

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

Read More......