بايگانی‌ وب‌نوشت

چیزهایی که من از خواندن Specification C# یاد گرفتم

bookبعد از خواندن دوباره کتاب C# in depth از Jon Skeet من تصمیم گرفتم سعی کنم واقعاً Specification زبان C# رو بخونم …

به عنوان کسی که به طور شهودی هر چیزی رو یاد میگیره ، تصمیم گرفتم یک نسخه از کتابی رو خریداری کنم که با توضیحات و تفاسیر کامل تمام تاپیک های C# رو تا .NET 4 رو پوشش داده باشه – که کامنتهای خوبی از متخصص ها در این زمینه هم داشته باشه.

بعد از خواندن چند صفحه بسیار متعجب شدم از اینکه تا بحال فکر میکردم چیزهای کمی که بلدم وبه خیال خودم درست بودند ؛ تماماً غلط و اشتباه هستند  و تصمیم گرفتم که لیستی از چیزهای جدید رو که تا حالا از خواندن این کتاب یاد گرفتم بنویسم .

در این قسمت شما میتوانید چیزهای جدیدی که من از خواندن فصل اول یاد گرفتم رو ببینید :

تمام انواع Value Type در Stack ذخیره نمی شوند

بیشتر Developerها اعتقاد دارند که reference type ها در heap ذخیره میشوند درحالی که value type ها همیشه در stack – این قضیه همیشه هم درست نیست .

یک کلاس را در نظر بگیرید (که به عنوان یک reference type شناخته می شود) که یک عضو Integer ( که یه عنوان یک value type شناخته میشود) دارد ، کلاس در heap ذخیره میشود و بنابر این اعضای آن شامل value type هم در heap قرار میگیرند و فقط دیتای آنها به صورت by value کپی میشود .

Read the rest of this entry

ویژگی های جدید در .NET 4.5

این مقاله برای کسانی است که علاوه بر C# در مورد ویژگی های .NET  پیش زمینه ی فکری دارند. یه بخش هایی اش قابل ترجمه نبود، و من هم بخش های مهم رو ترجمه کردم، توصیه میکنم حتما خود مقاله رو هم بخونید.

بابک فخریلو

این مقاله خلاصه ای از ویژگی های کلیدی و بهبود هایی که در .NET 4.5 مطرح شده را معرفی می کند، از این رو بررسی صرفا کلی روی framework خواهیم داشت.

.NET for Windows Store apps

بخشی از .NET 4.5 برای ایجاد برنامه های ویژه ی Windows Stores است. این بخش، .NET for Windows Store نامیده می شود و می توانید بررسی آن را در Windows Dev Center بخوانید.

Portable Class Libraries

For more information, see Cross-Platform Development with the .NET Framework.

در Visual Studio 2012، قالب پروژه ای  را می بینید به نام Portable Class Library که به شما این امکان را می دهد تا managed assembly هایی را ایجاد کنید که روی بستر های مختلف .NET قابل اجرا باشد. در حقیقت، شما بسترهای مد نظر خود (Windows Phone و .NET For Windows Store) را انتخاب می کنید.Type های قابل استفاده در پروژه شما، به طور خودکار به Type های موجود در بستر ها محدود می شوند. برای اطلاعات بیشتر می توانید Cross-Platform Development with the .NET Framework  را بخوانید.

ویژگی های اصلی و بهبودها

ویژگی ها و بهبود های زیر به CLR افزوده شده اند:

  • امکان کاهش restart شدن سیستم، با شناسایی و بستن برنامه های تحت .NET 4 . اطلاعات بیشتر در این زمینه.
  • پشتیبانی از آرایه هایی با حجمی بیش از 2 گیگابایت رو سیستم های 64 بیتی. این ویژگی را باید در فایل configuration فعال کنید. می توانید <gcAllowVeryLargeObjects> element را برای اطلاعات بیشتر بخوانید.
  • عملکرد بهتر برای سرورها، از طریق background garbage collection. وقتی از  GC در سیستم سروری که .NET 4.5 روی آن نصب است، استفاده می کنید، این ویژگی به طور خودکار فعال می شود. می توانید  Fundamentals of Garbage Collection را برای اطلاعات بیشتر بخوانید.
  • کامپایل JIT در background، که به طور اختیاری برای پردازنده های چند هسته ای فراهم است و می تواند عملکرد برنامه را بهبود بخشد. ProfileOptimization را ببینید.
  • امکان محدود سازی زمان اجرای یک Regular Expression.  Regex.MatchTimeout را ببینید.
  • امکان تعریف فرهنگ (Culture) پیش فرض برای یک application domain. کلاس CultureInfo را ببینید. (این قبلا نبود؟!)
  • پشتیبانی Console از Unicode. کلاس  Console  را ببینید.
  • عملکرد بهتر به هنگام خوانش resources (منظور منابعی چون RAM یا پردازنده نیست، تصاویر، رشته ها و … را شامل می شود) مورد استفاده ی برنامه. Packaging and Deploying Resources in Desktop Apps را بخوانید.
  • بهبود فشرده سازی از نو Zip برای کاهش فایل فشرده شده. System.IO.Compression را ببینید.
  • سپردن فشرده سازی رشته ها به  سیستم عامل، که به هنگام استفاده در Windows 8، Unicode 6.0 را پیاده سازی می کند. در صورت استفاده در بسترهای دیگر، از ویژگی خود .NET برای فشرده سازی رشته استفاده می شود.

Read the rest of this entry

محاسبه ی یک عبارت ریاضی Postfix

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Collections;

namespace postFixCalulate
{
    class Program
    {
        static void Main(string[] args)
        {
            string a = "123*+";
            PostFixCal obj = new PostFixCal();
            float result=obj.Calulate(a);

            Console.WriteLine(result);
            //resutl is 7

        }
    }

    class PostFixCal
    {
        Stack stack = new Stack();
        string members;

        public float Calulate(string term)
        {
            members = term;

            for (int i = 0; i < members.Length; i++)
            {
                if (Char.IsDigit((char)members[i]))
                {
                    stack.Push(members[i].ToString());
                }
                else
                {
                    double y2 = Convert.ToDouble(stack.Pop());
                    double y1 = Convert.ToDouble(stack.Pop());
                    double z = 0;
                    switch ((char)members[i])
                    {
                        case '+':
                            z = y1 + y2;
                            break;
                        case '-':
                            z = y1 - y2;
                            break;
                        case '*':
                            z = y1 * y2;
                            break;
                        case '/':
                            z = y1 / y2;
                            break;
                    }
                    stack.Push(z);
                }
            }

            return Convert.ToSingle(stack.Peek());
        }
    }
}

مرتب سازی لیست پیوندی در #C

در زیر کد مرتب سازی لیست پیوندی یک طرفه را می بینید:

        public void SortList()
        {
            Node a, b, c, e = null;
            Node save;

            while (e != firstNode.next)
            {
                c = a = firstNode;
                b = a.next;

                while (a != e)
                {
                    if (a.data > b.data)
                    {
                        if (a == firstNode)
                        {
                            save = b.next;
                            b.next = a;
                            a.next = save;

                            firstNode = b;
                            c = b;
                        }
                        else
                        {
                            save = b.next;
                            b.next = a;
                            a.next = save;

                            c.next = b;
                            c = b;
                        }
                    }
                    else
                    {
                        c = a;
                        a = a.next;
                    }

                    b = a.next;

                    if (b == e)
                    {
                        e = a;
                    }
                }
            }
        }

الگوریتم های sort در c#(قسمت هفتم)

ترجمه و آماده سازی: بهنام منتظر
7-Shell sort:
بالاخره نوبت به هفتمین الگوریتم مرتب سازی(هفتمین خوان) رسید.مرتب سازی لایه ای یک مرتب سازی است که با کاهش رشد یا همان ارتقا کار می کند و در واحد های برنامه نویسی خام بیشتر به عنوان مرتب سازی شانه ای شناخته شده است. این الگوریتم با پیمایش های متعدد بر روی لیست کار می کند و در هربار پیمایش مجموعه داده هایی با اندازه های یکسان را به وسیله ی مرتب سازی درجی مرتب می کند.با هر پیمایش که در لیست صورت می گیرد مجموعه ی داده های مرتب شده بیشتر و بیشتر می شود تا مجموعه شامل کل لیست شود.(هر چه اندازه مجموعه ها بیشتر شود ، تعداد مجموعه هایی که باید مرتب شوند کمتر می شود.)

آیتم هایی که در هر مجموعه هستند ترجیحا به هم متصل نیستند،اگر n مجموعه داشته باشیم هر مجموعه از آیتم های n تا در میان تشکیل شده است.به عنوان مثال اگر 3 مجموعه داریم مجموعه ی اول شامل المان هایی است که در مکان های 1، 4، 7 و … قرار دارند.مجموعه ی دوم شامل المان هایی است که در مکان های 2، 5، 8و… قرار دارند.و مجموعه ی سوم شامل المان هایی است که در مکان های 3، 6، 9 و… قرار گرفته اند. اندازه ی مجموعه هایی که برای هر تکرار استفاده می شوند تاثیر اساسی بر بازده مرتب سازی دارد.

مرتب سازی لایه ای 5 برابر سریع تر از مرتب سازی حبابی است و اندکی بیش از دو برابر مرتب سازی درجی ( نزدیک ترین) رقیبش است. مرتب سازی لایه ای از مرتب سازی ادغامی ،پشته ای و سریع عمدتا آهسته تر است ولی الگوریتم ساده ی مرتبت به آن ،آن را به گزینه ای مناسب برای مرتب سازی لیست ها با آیتم های کمتر از 5000 تا «به غیر از جاهایی که سرعت خیلی مهم است «تبدیل کرده است.همچنین برای مرتب سازی های تکراری با آیتم های کمتر بسیار مناسب است.

Read the rest of this entry

الگوریتم های sort در c#(قسمت ششم)

ترجمه و آماده سازی: بهنام منتظر

6-Selection sort:

الگوریتم ششم که مورد بررسی قرار می گیرد الگوریتم مرتب سازی انتخابی است.مرتب سازی انتخابی به وسیله ی انتخاب کوچک ترین آیتم باقی مانده در لیست عمل می کند،وسپس آن را با آیتمی که در جای بعدی قرار می گیرد جا به جا می کند.

این نوع پیاده سازی نسبت به مرتب سازی حبابی یک ارتقا محسوب می شود ولی مرتب سازی درجی نسبت به مرتب سازی حبابی دو برابر سریع تر بوده و از نظر سادگی در پیاده سازی به سادگی مرتب سازی انتخابی است.خلاصه واقعا هیچ دلیلی برای استفاده از مرتب سازی انتخابی به جای مرتب سازی درجی وجود ندارد.

اگر شما بنا به دلایلی می خواهید از مرتب سازی انتخابی استفاده کنید،سعی کنید از لیست هایی با بیش از 1000 آیتم و یا لیست های مرتب سازی که تکرار می شوند با بیش از 200 آیتم استفاده نکنید.

Read the rest of this entry

الگوریتم های sort در c#(قسمت پنجم)

ترجمه و آماده سازی: بهنام منتظر

5-Quick sort:

پنجمین الگوریتم مرتب سازی که مورد بررسی قرار می دهیم الگوریتم مرتب سازی سریع است .مرتب سازی سریع یک الگوریتم مرتب سازی به شدت بازگشتی جایگزین است که ابتدا جدا می کند و سپس مرتب می کند.یک فرد معمولی ممکن است بگوید مسلما این نوع مرتب سازی سریع تر است. الگوریتم  مرتب سازی سریع در ظاهر ساده به نظر می رسد ولی برای تبدیل به کد کار بسیار مشکلی در پیش است.

الگوریتم بازگشتی از 4 گام تشکیل شده است:

1- اگر یک المان و یا کمتر برای مرتب شدن در آرایه وجود داشته باشد،سریعا بر می گردد.

2-یک المان را از آرایه بر می دارد و به عنوان نقطه ی محوری قرار می دهد.»معمولا از المانی که در سمت چپ سایر المان ها قرار دارد استفاده می شود»

3-آرایه را به دو قسمت تقسیم می کند»یکی با مقادیر بزرگتر از نقطه ی محوری و دیگری با مقادیر کوچکتر از نقطه ی محوری».

4-به طور بازگشتی الگوریتم را برای دو نیمه دیگر تکرار می کند

Read the rest of this entry

الگوریتم های sort در c#(قسمت چهارم)

ترجمه و آماده سازی:بهنام منتظر

4-Merge sort 

چهارمین الگوریتم مرتب سازی که می خواهیم به شرح آن بپردازیم مرتب سازی ادغامی -Merge sort-است.مرتب سازی ادغامی لیست را به دو قسمت مساوی تقسیم می کند و آن را در دو آرایه جا می دهد.هر آرایه به صورت بازگشتی مرتب می شود،سپس آن ها را دوباره با یکدیگر ادغام می کند تا لیست نهایی مرتب شده را شکل دهند.

شکل های اولیه ی پیاده سازی مرتب سازی ادغامی مجبور به استفاده از سه آرایه هستند» برای هر یک از نیمه ها یک آرایه و یکی هم برای این که لیست مرتب شده در آن ذخیره شود «.الگوریتم زیر آرایه ها را در جا ادغام می کند و در نتیجه فقط به دو آرایه نیاز است.ساختار های غیر بازگشتی هم برای مرتب سازی ادغامی وجود دارد،ولی آن ها در بیشتر دستگاه ها در بالا بردن بازده نسبت به الگوریتم های بازگشتی هیچ تاثیر مهمی نداشته اند.

مرتب سازی ادغامی در مجموعه های بزرگ اندکی سریع تر از مرتب سازی پشته ای-Heap sort- است،ولی به خاطر آرایه ی دوم به حافظه ی دو برابر نسبت به مرتب سازی پشته ای نیاز دارند.این نیاز به حافظه ی اضافی مرتب سازی ادغامی را برای بسیاری از اهداف نا مناسب می کند»مرتب سازی سریع-Quick sort-در بیش تر مواقع گزینه ی مناسب تری است و مرتب سازی پشته ای-Heap sort-برای مجموعه های خیلی بزرگ مناسب تر است».

مرتب سازی ادغامی هم مانند مرتب سازی سریع ساختار بازگشتی دارد که آن را به گزینه ای نامناسب «برای برنامه هایی که روی دستگاه هایی با حافظه محدود اجرا می شوند» تبدیل می کند.

Read the rest of this entry

الگوریتم های sort در c#(قسمت سوم)

ترجمه و آماده سازی : بهنام منتظر

3-Insertion sort

سومین الگوریتم مرتب سازی که بررسی می کنیم الگوریتم مرتب سازی درجی (insertion sort) است. مرتب سازی درجی همان طور که از اسمش پیداست هر آیتم را در جای مناسب در لیست نهایی درج می کند.ساده ترین پیاده سازی این الگوریتم به 2 لیست نیاز دارد»یکی لیستی که آیتم های اولیه در آن قرار دارند و دیگری لیستی که آیتم های مرتب شده در آن قرار می گیرند».برای نگه داشتن حافظه در بیشتر جاهایی که این الگوریتم را پیاده سازی می کنند از یک مرتب سازی به جا استفاده می کنند که این گونه کار می کند که آیتم جاری را به پشت آیتم های مرتب سازی شده می برد و این جا به جایی را با عناصر قبل تا جایی ادامه می دهد که هر آیتم سر جای خودش قرار بگیرد.

تاثیر مرتب سازی درجی اندکی بیش از دو برابر مرتب سازی حبابی است .

مرتب سازی درجی یک انتخاب مناسب برای مرتب سازی لیست هایی با یک یا دو هزار آیتم و یا کمتر است. این الگوریتم به طور قابل توجهی از مرتب سازی لایه ای (Shell sort) ساده تر است البته با اندکی بازدهی پایین تر. در شرایط مشترک مرتب سازی درجی دو برابر سریع تر از مرتب سازی حبابی و 40 درصد از مرتب سازی انتخابی-Selection sort- سریعتر است.مرتب سازی درجی نباید برای لیست هایی با بیش از دو هزار آیتم یا مرتب سازی های تکراری برای لیست هایی با چند صد آیتم یا بیشتر استفاده شود. تکه کد سی شارپ Insertion sort به شکل زیر می باشد:

Read the rest of this entry

الگوریتم های sort در c#(قسمت دوم)

ترجمه و آماده سازی: بهنام منتظر

2- Heap sort:

دومین الگوریتم مرتب سازی که به شرح آن می پردازیم heap sort یا مرتب سازی به صورت پشته ای است. heap sort به ساختارهای بازگشتی زیاد و یا آرایه های متعدد نیاز ندارد.این ویژگی heap sort را به یک گزینه ی مناسب برای مجموعه های زیاد اطلاعات تبدیل می کند.heapکلا به معنی پشته یا تپه می با شد و مرتب سازی به صورت پشته ای همان طور که از اسمش پیداست با ساختن پشته ای از مجموعه های داده ها شروع می شود، سپس بزرگترین تکه ها را حذف می کند و آن را در انتهای آرایه ی مرتب شده قرار می دهد.بعد  ازحذف بزرگترین تکه پشته را از نو می سازد و بزرگترین تکه ی باقیمانده را حذف می کند و آن را در جای خالی بعدی درانتهای آرایه مرتب شده قرار می دهد.پیاده سازی اولیه به دو آرایه نیاز دارد»یکی برای نگه داشتن پشته ها و دیگری برای نگه داشتن تکه های مرتب شده».برای انجام مرتب سازی به جا و ذخیره ی فضا به آرایه ی دوم نیاز پیدا می شود،الگوریتم زیر با استفاده از یک الگوریتم مشترک برای پشته ها و آرایه ی مرتب شده کلک زده است.هر وقت که یک آیتم(تکه) از پشته حذف می شود ،در انتهای آرایه فضایی را خالی می کند که آیتم حذف شده می تواند در آن جا ذخیره شود. تکه کد سی شارپ heap sort  به صورت زیر می باشد:

Read the rest of this entry

الگوریتم های sort در c#(قسمت اول)

ترجمه و آماده سازی: بهنام منتظر

برای درس ساختمان داده ها چند وقتی بود که دنبال الگوریتم های مرتب سازی یا همون sort می گشتم که با سی شارپ هم پیاده سازی شده باشه که بالا خره به یه جمع بندی کلی رسیدم که به نظرم اومد بد نبا شه برای استفاده بقیه روی وبلاگ بذارم.

الگوریتم های مرتب سازی به طور کلی به 7 دسته ی زیر تقسیم می شوند:

1- Bubble sort

2- Heap sort

3-Insertion  sort

4-Merge sort

5- Quick sort

6-Selection sort

7-Shell sort

که در این سری از مطالب بیشتر در مورد آن ها صحبت می شه .

Read the rest of this entry

ایجاد فایل تنظیمات در C# با بهره گیری از XML

خیلی از برنامه های که طی روز با اونها کار می کنید یک سری تنظیمات دارن که برای درست کار کردن اونها و حفظ حالت هایی که شما برایش تعیین می کنید ، کاربرد دارن.خول حالا این تنظیمات کجا باید ذخیره بشن ؟  راه های متفاوتی هست ، از ذخیره در Registry گرفته تا ذخیره در فایل های متنی و در موارد حرفه ای تر پایگاه داده.اما این مثالی که من تو سایت رسمی مایکروسافت دیدم ، از فایل های XML برای ذخیره تنظمیات استفاده کرده بود.در حقیقت شما تو اینجا خوندن و نوشتن تو فایل های XML رو هم یاد می گیرد.

برای دانلود فایل آموزشی اینجا

و برای دانلود source code  برنامه اینجا کلیک کنید