درس مباحث ویژه

Visual C#

استاد:مهندس ضیغمی

آموزش درس مباحث ویژه

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Microsoft Visual Studio   (C#)

سی‌شارپ (C#) زبانی شیءگرا و سطح بالا (high level) از خانوادهٔ زبان‌های چارچوب دات‌نت شرکت مایکروسافت است.

زبان #C، یک زبان برنامه نویسی چند الگویی است و منظم شده مدل‌های تابعی، امری، عمومی، شی گرا و جز گرا می‌باشد. این زبان توسط ماکروسافت و جزئی از دات نت به وجود آمد و بعدا استانداردهای ECMAو ISO را نیز در بر گرفت. #C یکی از 44 زبان برنامه نویسی ای است که توسط Common Language Runtime از .NET Framework پشتیبانی می‌شوند و در همه جا به وسیله Microsoft Visual Studio شناخته می‌شود.

این زبان برپایه سادگی، مدرن بودن، همه منظوره و شی گرا بودن ساخته شد.Anders Hejlsberg، طراح زبان برنامه نویسی دلفی، سرپرستی تیم طراحان زبان #C را بر عهده داشت.این زبان دارای دستوری شی گرا مشابه ++C است و به شدت از زبان‌های جاوا و دلفی تاثیر پذیرفته‌است.در ابتدا نام این زبان COOL بود که مخفف C like Object Oriented Language بود، هر چند در جولای 2000، زمانی که ماکروسافت پروژه را عمومی اعلام کرد، اسم آن به #C تغییر پیدا کرد.

 

تاریخچه

در سال 1999، شرکت سان اجازه استفاده از زبان برنامه نویسی جاوا را در اختیار ماکروسافت قرار داد تا در سیستم عامل خود از آن استفاده کند.جاوا در اصل به هیچ پلت فرم یا سیستم عاملی وابسته نبود، ولی ماکروسافت برخی از مفاد قرار داد را زیر پا گذاشت و قابلیت مستقل از سیستم عامل بودن جاوا را از آن برداشت.شرکت سان پرونده‌ای علیه ماکروسافت درست کرد و ماکروسافت مجبور شد تا زبان شی گرای جدیدی با کامپایل جدید که به ++C شبیه بود را درست کند. در طول ساخت دات نت، کلاس‌های کتابخانه‌ای با زبان و کامپایلر SMC نوشته شدند.در سال 1999 آندرس هلزبرگ گروهی را برای طراحی زبانی جدید تشکیل داد که در آن زمان نامش Cool بود و همانند C بود با خواص شی گرایی. ماکروسافت در نظر داشت اسم این زبان را تا آخر Cool قرار دهد، ولی به دلیل مناسب نبودن برای اهداف تجاری این کار را نکرد. در ارائه و معرفی رسمی .NET در PDC در سال 2000 این زبان به سی شارپ تغییر نام یافت و کتابخانه کلاس‌ها و runtime در ASP.NET به#C منتقل شدند. مدیر و سرپرست طراحان در ماکروسافت آندرس هلزبرگ بود که تجربه قبلی او در طراحی Framework و زبان‌های برنامه سازی++Borland , Delphi, Turbo Pascal, Visual C به آسانی در دستورالعمل‌های سی شارپ قابل رویت است و به همان خوبی در هسته CLR.

 

اهداف طراحی زبان

استاندارد ECMA این اهداف طراحی زبان را برای #C بر آورده می‌سازد: • سی شارپ یک زبان برنامه سازی ساده،مدرن،برای اهداف عمومی و شی گرا است. • به دلیل اهمیت داشتن موضوع نیرومندی و دوام و بهره وری برنامه نویس،زبان دارای چک کننده Strong Type ، چک کننده مرزهای آرایه، تشخیص حالتهایی که یک متغیر مقدار دهی اولیه نشده‌است،قابلیت انتقال کدها و Garbage Collection خودکار است. • این زبان برای استفاده در اجزای توسعه نرم افزار برای دستیابی به مزایای سیستم‌های توزیعی در نظر گرفته شده‌است. • قابلیت انتقال برنامه نویس بسیار مهم است،خصوصاً برای آن دسته از برنامه نویسانی که با زبان‌های C و C++ آشنا هستند. • پشتیبانی از این زبان برای بین المللی شدن بسیار مهم است. • زبان سی شارپ برای نوشتن برنامه‌ها برای سیستمهای تعبیه شده و میزبان در نظر گرفته شده‌است، از سیستم عامل‌های پیچیده بسیار بزرگ گرفته تا توابع اختصاصی بسیار کوچک. • هر چند برنامه‌های نوشته شده با #C طوری هستند که از لحاظ حافظه و پردازنده مورد نیاز مقرون به صرفه باشند، ولی خود زبان از لحاظ اندازه و کارایی به خوبی زبان‌های C و اسمبلی نیست.

 

 

ویژگی های C#

برخی از تفاوت‌های زبان سی شارپ با C و ++C عبارتند از:

  • هیچ تابع یا متغیر سراسری(Global) وجود ندارد، تمام متدها و اعضا بایستی در داخل کلاس‌ها تعریف شوند.این امر ممکن است، هر چند برای استفاده از متغیر‌ها و توابع عمومی باید از متدها و متغیرها در کلاس‌های عمومی استفاده کرد.
  • متغیر‌های عمومی، بر خلاف C و ++C ، نمی‌توانند بلاک‌های پیوستی را در بر بگیرند.
  • سی شارپ دارای یک نوع داده بولی است (bool).برخی از عبارت‌ها مانند while و if که شرطی هستند، نیازمند یک عبارت نوع بولی هستند.همان طور که ++C نیز دارای نوع داده بولی است،این نوع داده به راحتی می‌تواند به یا از Integerها تبدیل شود، و عبارتی مانند (if(a نیازمند این امر است که a از یک نوع قابل تبدیل به bool یا اشاره گر باشد.کامپایلر سی شارپ برنامه نویس را در این شرایط مجبور به استفاده از عباراتی می‌کند که به درستی یک مقدار bool را برمی‌گردانند. بنابراین دستوری مانند (if(a = b باعث بروز خطا می‌شوند.(به جای = بایستی از == استفاده شود)
  • در سی شارپ ، اشاره گرهای به حافظه بایستی فقط در داخل بلوکهای unsafe استفاده شوند و برنامه در این حالت برای اجرا نیاز به اجازه از کاربر دارد.بیشتر دسترسی شی از طریق شی امن است که یا همیشه در حال اشاره به شی صحیح موجود است یا یک مقدار Null دارد. اشاره گری به شی به درد نخور یا بلاک حافظه رندم غیر ممکن است.اشاره گر نا امن می‌تواند به نمونه‌ای از value-type ، آرایه، رشته یا بلاکی که حافظه به آن داده شده‌است اشاره نماید.کدی که به عنوان نا امن علامت نخورده باشد، هنوز می‌تواند اشاره گر‌ها را از سیستم بازیابی یا در آن ذخیره کند ولی نمی‌تواند مرجع جدیدی به آنها اختصاص دهد.
  • حافظه ساماندهی شده نمی‌تواند صریحا آزاد شود، ولی به طور خودکار به عنوان به درد نخور تلقی می‌شود.انتخاب آدرس‌های به درد نخور حافظه نفوذ ناپذیر است. هم چنین #C با استفاده از عبارات، پشتیبانی مستقیمی از پایان اجباری می‌کند(پشتیبانی از اصطلاح Resource Acquisition Is Initialization).
  • وراثت چندگانه از کلاس‌ها در این زبان پشتیبانی نمی‌شود.البته یک کلاس امکان ارث بری از تعداد نامحدود واسط‌ها را دارد.پشتیبانی نکردن از وراثت چندگانه به دلیل اهداف معماری این زبان در CLI و برای جلوگیری از پیچیدگی است.
  • سی شارپ بسیار typesafe تر از C++ است. تنها تبدیلات ضمنی مثل تبدیل نوع داده کوچکتر به بزرگتر یا تبدیل نوع مشتق شده به نوع پایه به طور پیش فرض و بدون خطا صورت می‌پذیرد.هیچ تبدیل ضمنی ای میانBooleanها و Integerها وجود ندارد و هر تبدیل user-defined بایستی به صراحت با یکی از کلمات explicit یا implicit نشانه گذاری شود. تبدیل b به a در حالتی که a یک Integer و b یک double باشد در زبان C++ مجاز است اما در سی شارپ به یک خطای زمان کامپایل منجر می‌شود(بایستی به صورت explicit تعریف شود)
  • اعضای Enumeration در داخل محدوده شخصی خود قرار دارند.
  • #C قابلیت syntactic sugar را برای توابع متداول، اکسسور‌ها و ماجول‌های کسول شده در یک کلاس به صورت ویژگی‌ها قرار داده‌است.

اکسسورها که خاصیت نیز گفته می‌شوند در زبان سی شارپ قادر به کنترل دسترسی اعضا و معتبرسازی داده‌ها هستند.

  • تمام انواع بازتابی(Reflection) و بازیابی(Recovery) قابل استفاده‌است.
  • در حال حاضر (3 جوان 2008) دارای 77 کلمه رزرو شده‌است.

انواع داده ها

 (Byte 0-255) (Sbyte 127-128) (Ubyte 255-0)              !- عددی :   صحیح :

(Long)  (Slong)  (Float) (Double)  (Ulong)  (Decimal)                 اعشاری:     

   (bool) =True – False            2-غیر عددی :     منطقی :

 (‘2’)       (‘a’)       (char)                                 کاراکتر :

           (Date / Time)                                       تاریخ    :

تعریف متغیر

Private     Float   Y ;                        :           (Private)     1- اختصاصی

Public      int16   X ;                        :            (Publice)      2- عمومی

    Protected    String   str ;                 : (Protected)    3- محافظت شده

* نکته ها

1- Float    X ;                                       است  Private اگر داخل شئ تعریف شده باشد  

2- Int 32  X ;                                               است  public هرچند که زیر آن تابع آمده         

Void fun () {

      }

3- int    x ;              (پیش فرض 32 میباشد)        Access=16 , SQL=32 , SQL=64           

ثابت ها

         1-#Define        نام ثابت        مقدار

             #Define              x                5

             #Define             str            “Ali”

         2-  Const     نوع         نام =مقدار     ;

               Const     int         x     =    5      ;

               Const     int   x=7 ,Float  y=3.5 ,Str  =”Ali”  ;

عملگرها

1-محاسباتی :             +  ،  -  ،  *  ،  /  ،  %  ،  ++  ،  --  ، | قرینه|   

2-ترکیبی :                  =%  ،   =/  ،  =*  ،  =-   ،   =+  

3-رابطه ای :               ==  ،  =!  ،  =>  ، >  ،  =<  ، < 

(And) =  &&           ،    (Or)  = | |     ،       (Not) = ! 4-منطقی :                   

(111001)  & (111110) = (111000)   :  And بیتی         5-بیتی :

      (11010)   |   (10010) = (11010)      :    Or  بیتی                    

x>>2: (00111) = (00001):                    شیفت به راست

     x<< 2 : (00111) = (11100) :  ، شیفت به چپ ~ (10010)=(01101) : Notبیتی                     

X                                             نام :

    P=&x=5                   مقدار : 5 6- عملگر اشاره ای : متغیر  

P=*x=1000                                                  آدرس:1000    

( عبارت2  :  عبارت1    ؟  شرط )  = متغیر ;          7- عملگر علامت ؟                                             X = 7 ;

  Y = (X>3 ؟  X+2 : X*4) ;                                         Y= 9

 

  For (i=0 , j=1;i<10 && j<20 ; i++; j++)                                                 ( , )8- عملگر                                                                   شرط با عملگر منطقی میباشد(ترکیبی)

 

( Int           Float            Doubleتبدیل نوع     (

Int  x ;                         1-روش انتساب (=)                    

                                     Float  y = 3.75 ;                                                                                                             

Y=4

                                       X = y ;                     

 

 

                     Int  x ;                                        2-روش محاسباتی                                                                  Char  ch ;                                   x + chy ;                                                                                                                    

                    Float   y ;                                      int

                                                                      int

                                                                       

                                                                Float                       Float                                            

(Type Casting )   3-روش استفاده از پرانتز

Int  x=5, y=6, z=8  ;                               avg = (Float)(x+y+z) / 3 ;              

Float   avg ;                                            avg = 6.3

 

Method  4-استفاده از متد

ToString( )   ,  ToSingle( )  ,  ToDouble( )  , ToBoolean( ) , ToInt16( ) , ToInt32( )

ToInt64( ) , ToByte( ) , ToSbyte( ) , ToDecimal( ) , ToChar( ) .

 

تغییر نوع متغیر

Int  x ;       نام متغیر .  نام متد  ( ) ;  x.Tostring( ) ;

Int  x = Convert.ToInt32(textbox1.text) ;

 

 

 

 

 

 

مراحل ایجاد پروژه جدید در برنامه

Windows Form Application 3-گزینه

انتخاب شود

Create Project1-ابتدا بروی

گزینه Visual C#2-از منوی

 انتخاب شودWindows

 

 

 


 

6- انتخاب نام هسته پروژه

4-نام سند پروژه درج شود

 

5-محل ذخیره سازی پروژه انتخاب شود

 

 

 

C# محیط برنامه

Standard نوار

ToolBox

جعبه ابزار

Menu Bar نوار منوM

Form1.cs

C#محیط کدنویسی

Layoutنوار

Solution Explorer

 

 

 

 


محیط طراحی

Design

Data Source

پنل اتصال با پایگاه

Server Explorer

پلل پایگاه داده

        

Properties   پنل

Status Bar نوار وضعیت

لیست خطاها.هشدارها.پیامها

Error List

 

 

 

 


C#محیط کدنویسی

        

Server Explorer                     پنل Datasourceپنل                    Toolboxپنل

 

مثال) برنامه تبدیل ثانیه ورودی  به ساعت، دقیقه، ثانیه.

 و 4Label  ابزارهای مورد استفاده را بر روی فرم مربوطه قرار میدهیم. 4 عدد Toolbox ابتدا از پنل  درج مینماییم.سپس خصوصیات و تنظیمات هر کدام از ابزارها را باButton و 3 عدد Textboxعدد

مربوط به خودشان تنظیم میکنیم و سپس کدنویسی هر کدام از کلید ها Propertise استفاده از پنل

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

کد

  private void button1_Click(object sender, EventArgs e)

        {

            int x, h, m, s, b;

            x = Convert.ToInt32(textBox1.Text);

            h = x / 3600;

            b = x % 3600;

            m = b / 60;

            s = b % 60;

            textBox2.Text = h.ToString();

            textBox3.Text = m.ToString();

            textBox4.Text = s.ToString();

        }

کد

private void button2_Click(object sender, EventArgs e)

        {

            textBox1.Clear();

            textBox2.Clear();

            textBox3.Clear();

            textBox4.Clear();

            textBox1.Focus();

          

        }

کد

private void button3_Click(object sender, EventArgs e)

        {

            Application.Exit();

        }

 

کد ایجاد لوگوی ابتدایی برنامه

 آن تغییر میدهیم.Properties ابتدا یک فرم را مد نظر گرفته و خصوصیات آنرا از پنل

وسپس به قسمت رویدادهایWindowstate:MaxiMized,   StartPosition:CenterScreen

وارد کدنویسی آن میشویم.Paint در رویداد Eventsیعنی

using System.Drawing.Drawing2D;            مینویسیم.Usingنکته:کد روبرو را زیر آخرین

فرم کدهای زیر را درج میکنیم.Paint  سپس در کدنویسی رویداد

      private void Form1_Paint(object sender, PaintEventArgs e)

        {

            string text1 = "پروژه پایگاه داده";

            GraphicsPath path1 = new GraphicsPath();

            Point point2 = new Point(300, 325);

            path1.AddString(text1, FontFamily.GenericSerif, 1, 32f, point2, StringFormat.GenericDefault);

            Rectangle[] pathrect ={

                                    new Rectangle(200,200,300,200),

 new Rectangle(300,300,300,200)};

 path1.AddRectangles(pathrect);

 Region = new Region(path1);

 point2 = new Point(0, 0);

 Point point1 = PointToScreen(point2);

 e.Graphics.TranslateTransform((float)(Left-point1.X),(float)(Top-point1.Y));   e.Graphics.SmoothingMode=SmoothingMode.AntiAlias;

 e.Graphics.FillPath(Brushes.DeepSkyBlue, path1);

 e.Graphics.DrawPath(new Pen(Color.DarkMagenta, 10f), path1);

           

        }

 

تمرین ) پروژه سیستم دانشجویی

ایجاد میکنیم.Student یک سند جدید ایجاد کرده و سپس برای برنامه یک پایگاه داده به نام

 راست کلیک کرده و گزینهData Connectionرفته و بروی Server Explorerبرای اینکار به پنل

را انتخاب میکنیم.سپس بر روی پنجره ظاهر شده تنظیمات را انجام میدهیم. Add Connection

Yes و Okدر نهایت

حسابرسی تحت ویندوز انتخاب شود

نام پایگاه داده را در این محل درج میکنیم

 را Add New Table رفته و راست کلیک کرده و گزینه Tableبعد از ایجاد پایگاه داده بر روی گزینه

انتخاب میکنیم.(جدول ورود کاربر)

سپس به محیط ایجاد جدول رفته و فیلدهای مربوط به جدول و نوع آنها و... را درج میکنیم.

پس از ایجاد فیلدهای جدول ،آنرا ذخیره میکنیم برای اینکار بر روی دکمه ذخیره تک دیسک کلیک میکنیم    

پس از آن برای ایجاد( جدول اطلاعات دانشجو) مانند قبلی اقدام میکنیم و فقط فیلدهای آنرا مطابق جدول مربوطه درج میکنیم.

دومین جدول را همانند قبلی ذخیره میکنیم و سپس سومین جدول (جدول دروس) را هم ایجاد میکنیم و در آخر آنرا ذخیره میکنیم.

میتوانیم پس از ایجاد ساختار جدول را تغییر بدهیم برای اینکار بر روی جدول مربوط راست کلیک  زده و به محیط ویرایش جدول برویم.Open Table Definitionکرده و گزینه

سپس میتوانیم به جدول های ایجاد شده مقدار بدهیم برای اینکار بر روی جدول مربوطه راست         را انتخاب میکنیم سپس به فیلدها مقدار میدهیم.Show Table Data  کلیک کرده و گزینه  

تمامی جداول را میتوان به همین روش مقداردهی کرد .

پس از ایجاد جداول یک اتصال بین جداول مورد ارتباطی ایجاد میکنیم برای اینکار بر روی گزینه

را انتخاب میکنیم .Add New Diagramرفته و راست کلیک و گزینه Data Base Diagram

                 

بعداز آن جدول ها مورد ارتباطی را اضافه میکنیم و آنها را به یکدیگر متصل مینماییم وآنرا ذخیره میکنیم

راست کلیک کرده و Viewsایجاد کرد برای اینکار برروی View برای ادغام کردن دو جدول باید یک

را انتخاب میکنیم و سپس جداول مورد ادغام را اضافه میکنیم.Add New Viewگزینه

                                

سپس  همانند شکل زیر فیلدهای مورد ادغام را از بین هر دو جدول انتخاب میکنیم و ذخیره میکنیم

حالا ایجاد پایگاه داده با موفقیت به پایان رسیده و نوبت ایجاد یک اتصال از پایگاه داده به برنامه  را انتخاب میکنیمAdd New DataSourceرفته و گزینه Data Sourcesمیباشد.برای اینکار به پنل

را انتخاب کرده و به مرحله بعدی رفته و سپس اتصال پایگاه داده را انتخابDatabase گزینه

 استفاده میکنیم و یک اتصالNew Connectionمیکنیم و اگر اتصال وجود نداشت از گزینه

جدید ایجاد میکنیم و به مرحله بعدی میرویم و جداول و ادغام های ملزومی در ارتباط با برنامه

 .Finishرا مشخص کرده و در نهایت DataSetرا انتخاب میکنیم و در آخر نام

 

 

اتصال پایگاه به برنامه با موفقیت به اتمام رسید حالا نوبت ایجاد فرم ها و کدنویسی رسیده است.

فرم شماره 1 :(لوگوی ابتدای برنامه)

 وFormBorderStyle:None   وBackGroundImage:خصوصیات فرم: تصویر مربوط به لوگو

                            .StartPosition:CenterScreen   و Text:پروژه پایگاه داده

کد مربوط به لوگو:

private void Form1_Load(object sender, EventArgs e)

        {

            this.Opacity = 1;

            for (int i=1;i<1000;i++)

            {

                this.Opacity -= 0.01;

                Application.DoEvents();

            }

            Form2 ob = new Form2();

            ob.ShowDialog();

        }

 

 

فرم شماره 2 :

RightToLeftLayout: True و RightToLeft:Yes  خصوصیات فرم:

Text:   و ورود کاربر StartPosition:CenterScreen 

کلیک کرده و آنرا از نوع Table1 رفته و بر روی Datasource به پنلProperties پس از تنظیمات

 را بر روی فرم2 درگ میکنیم و سپس دو دکمه ورود و Table1انتخاب کرده و سپس Details

خروج بر روی فرم ایجاد میکنیم.

  میگذاریم.PasswordChar:*      :Textbox نکته : خصوصیت رمزعبور.

private void Form2_Load(object sender, EventArgs e)

        {

            نام_کاربرTextBox.Text = "";

            رمز_عبورTextBox.Text = "";

 

                 }

 

 کدنویسی

    private void button1_Click(object sender, EventArgs e)

        {

            int x = table1BindingSource.Find("نام کاربر", نام_کاربرTextBox.Text);

            int y = table1BindingSource.Find("رمز عبور", رمز_عبورTextBox.Text);

            if (x != -1 && y != -1 && x == y)

            {

                Form1.ActiveForm.Hide();

                Form3 ob = new Form3();

                ob.ShowDialog();

            }

            else

            {

                MessageBox.Show("نام کاربري و رمزعبور را صحيح وارد کنيد", "اخطار", MessageBoxButtons.OK, MessageBoxIcon.Warning);

                نام_کاربرTextBox.Text = "";

                رمز_عبورTextBox.Text = "";

                نام_کاربرTextBox.Focus();

            }

        }

کدنویسی

private void button2_Click(object sender, EventArgs e)

        {

            Application.Exit();

        }