مقاله آموزشی سی شارپ

X
اگر این مطلب را مفید میدانید، لطفا برای حمایت از ما روی این دکمه کلیک کنید.

برای کار با زبان برنامه نویسی سی شارپ باید ابتدا نرم افزار Visual Studio را بر روی سیستم خود نصب نماییم.(آخرین نسخه این نرم افزار تا به امروز نسخه 2013)

برای باز کردن یک فایل که قبلا با زبان برنامه نویس سی شارپ نوشته شده است  2 روش وجود دارد:

1-روی فولدر مربوطه کلیک می کنیم و فایل با پسوند sln را باز می کنیم و فایل مربوطه در محیط ویژوال برای ما باز میشود.

2-راه دوم این است که ابتدا نرم افزار ویژوال را اجرا کنیم و سپس open project را کلیک کنیم مسیر مربوطه را وارد نماییم.

برای اینکه نرم افزار ویژوال استدیو با اکانت Administrator اجرا شود مراحل زیر را طی می کنیم:

1-روی نام ویژوال استدیو وآیکن آن راست کلیک می کنیم

2-Properties را کلیک می کنیم

3-Advanced

4-تیک Run as Administrator را می زنیم

مراحل ایجاد یک پروژه در محیط ویژوال:

1-روی New Project کلیک می کنیم

2-زبان باید روی Visual C# باشد

3-بر روی Console Applicationکلیک می کنیم

4-نام پروژه را وارد می نماییم(بهتر است نام های پیش فرض را نپذیرید و یک نام برای پروژه تان انتخاب نمایید)

در محیط ویژوال 2پنجره ی مهم داریم به نام های Solution Explorerوproperties این 2 پنجره در منوی View قرار دارد.

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

در سمت چپ صفحه ویژوال پنجره های Server Explorer ,ToolBox و تعدادی پنجره های دیگر قرار دارد که گذاشتن و برداشتن آنها و در کل مدیریت آن از طریق منوی View  امکان پذیر می باشد.

*پنجره ی Server Explorer  برای ارتباط ما با دیتابیس می باشد.(درصورت نیاز میتوانید نرم افزار اس کیو ال سرور را جهت ارتباط با بانک های اطلاعاتی نصب نمائید)

برای داشتن یک سازنده پیش فرض کلمه ctor  را تایپ می کنیم و 2بار کلید Tab را می فشاریم.(به اینگونه جنریت سازی در کد نویسی اسنیپت گویند)

مثال سازنده پیش فرض کلاس Person:

 

     () Public   Person

}

{

 

اگر ما خودمان سازنده را ننویسیم خود کلاس به صورت پیش فرض یک سازنده با شرح آنچه گفته شد تولید می نماید.                                                                                                 

چون داخل پرانتز ()هیچ ورودی نداریم به آن سازنده پیش فرض گفته می شود.

مثال سازنده با 2ورودی:

( Public  Person   (string name , string family

}

;This.Name = name

;This.Family = familyl

{

هر کلاس 4جز دارد که اجزا به ترتیب زیر می باشند:

1-فیلد

2-پراپرتی

3-متد

4-ایونت

 

فیلدها

 متغیرهایی هستند که داخل کلاس تعریف می نماییم.

مثال:تعریف یک فیلد به نام Age از جنس int

;Public   int   Age

تعریف یک فیلد خصوصی:

;Private string  _name

پراپرتی ها

در اصل همان فیلدها هستند که دامنه فعالیت آنها یک مقدار گسترده تر می باشد.

مثال:پراپرتی به نام Name از جنس String:

{{;Public   String  Name{get{return  _name;}set{_name=Value

 

از Framework 3 به بعد روش راحت تری برای پراپرتی ایجاد گشت:

برای ایجاد پراپرتی کلمه prop  را تایپ می کنیم و دو بار کلید Tab را می فشاریم

{;Public  int ID {get;set

1-پراپرتی هایی که فقط get دارند  Read Only هستند.

2-پراپرتی هایی که فقط set دارند  Write Only هستند.

3-پراپرتی هایی که هم  get و هم set دارند  Read and Write Only هستند.

*در بدنه get پراپرتی ما حتما return را داریم.

متدها

 می توانند از جنس Void باشند متدهایی که از این جنس هستند  نیاز نیست که مقداری را برگردانند ولی بقیه ی متدها با توجه به جنسی که دارند باید مقداری از همان جنس را Return نمایند.

متد از نوع Void:

;Privete  int _age

(Public  Void  SetAge(int age

{

;age=age_

                                                                                                                                                                   {

متد از نوع int:

()Public   int  GetAge

}

;(Return(_age

{

مثال:متد اد که یک پرسون می گیرد و به آرایه داخلی اد می کند

public bool Add(Person value)

        {

            try

            {

Person[] Temp = new Person[InnerList.Length + 1];

 

 int Count = 0;

  foreach (Person p in InnerList)

      {

          Temp[Count] = p;

          Count++;

      }

   Temp[InnerList.Length] = value;

   InnerList = Temp;

   return true;

 

    }

    catch

      {

 

           return false;

      }

        }

:نحوه ی فراخوانی آن در برنامه

MyList.Add(new person("shadi","Ahmadi",201));

 

ایونت ها

ایونت ها تعریف و رفتاری همچون متد ها دارند با کمی امکانات بیشتر.

ایونت در حقیقت نصیحتی هست که برای برخی آیتمها از جمله کنترل های موجود در برنامه نویسی مثل کلیک روی دکمه انجام می شود.

بطور مثال دکمه را توسط ایونت نصیحت می کنیم که اگر دبل کلیک روی دکمه انجام شد چه کاری را انجام دهد.

بحث ارث بری

همه ی کلاس ها به صورت پیش فرض از کلاس object  که پدر همه ی کلاس ها است به ارث می روند.

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

کلاس Person:

Class Person

}

()Public Person

}

{

(Public  Person(string name,string family

}

;this.Name=name

;this.Family=family

{

{;Public String Name{get;set

{;Public String Family{get;set

Public virtual string Display

}

get

}

{;(return  string.Format("Name:{0}\r\n Family:{1}\r\n",this.Name,this.Family

{

مثال:کلاس Student  اینهریت شده از کلاس Person

Class Student:Person

}

()Public Student

}

{

(Public  Student(string name,string family,int id):base (name,family

}

;this.ID=id

{

{;Public int ID{get;set

Public override string Display

}

get

}

{;(return  string.Format("Name:{0}\r\n Family:{1}\r\n",ID:{2}\r\n",base.Name,base.Family,this.ID

{

 

نحوه ی فراخوانی مثال بالا در کلاس پروگرام:

;("Person  oPerson=new Person("Amir","Chabok

;(console.writeline(oPerson.Display

;(777,"Student oStudent=new Student("Shahla","Shirazi

;(console.writeline(oStudent.Display

طریقه کامنت کردن

 برای کامنت کردن می توان از روش های زیر استفاده کرد:

1-تمام خطوطی که می خواهیم کامنت کنیم را انتخاب می کنیم واز Ctrl+K, Ctrl+C استفاده نماییم

2-تمام خطوطی که می خواهیم کامنت شود را بین #region  Name و #end region Name قرار می دهیم

به جای Name نام مورد نظرمان را وارد می کنیم.

آرایه ها

از جنس int  آرایه ای تعریف می کنیم و یک نام برای آن در نظر میگیریم و آن را new  می کنیم و تعداد خانه های آرایه را مشخص می نماییم

[Int  []   Name =new   int [5

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

(Public  Persons (params   person[]   persons

}

{

Interface:

برای داشتن Interface  روی نام برنامه راست کلیک می کنیم بعد از گزینه ی Add و بعد گزینه ی  New Item را کلیک می کنیم.Interface  را انتخاب می کنیم و یک نام برای آن درنظر می گیریم.

توجه:برای نام Interface استاندارد نام گذاری به این صورت است که حرف اول باید I  (آی انگلیسی)باشد و حرف دوم هم یک حرف بزرگ از حروف انگلیسی باشد.

مثال:

Interface ITest

}

;()String Test

{

مرحله ی بعدی Add کردن یک کلاس می باشد:

Class Test:ITest

وبعد موس را بر روی ITest قرار می دهیم و گزینه ی implement interface را انتخاب می نماییم.

کلاس پرسون:

()class Person:ITest

}

()public string Test

}

;("return string.Format("Person

{

کلاس استیودنت

class Student:ITest

}

()public string Test

}

;"return "Student

{

{

کلاس تیچر

class Teacher:ITest

}

()public string Test

}

;"return "Teacher

{

{

 

نحوه ی فراخوانی مثال بالا در بدنه پروگرام

;()Person oPerson=new Person

;()Student oStudent=new Student

;()Teacher oTeacher=new Teacher

ایجاد یک آرایه از جنس آبجکت که اشیا بالا را در بر دارد//

;{object [] List=new object []{oPerson,oStudent,oTeacher

(foreach (ITest  II in List

}

;(()console.writeline(II.Test

{

نکات اینترفیس ITest:

1-interface را با یک نام می سازیم.

2-یک قانون دارد و آن یک متد string است.

3-کلاس های دیگر می توانند قوانین interface را پیاده سازی نمایند.

4-interface مفهوم چندریختی را پیاده سازی می نماید.

5-هر کلاس از بی نهایت interface  می تواند ارث بری داشته باشد.

Abstract & Static Class

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

.می توان کلاس های دیگری داشت که از کلاس ابستراکت اینهریت شود

.از کلاس های اینهریت شده از کلاس ابستراکت می توان شی ساخت

.ابستراکت مفهوم چندریختی یا پلی مرفیزم را پیاده سازی می کند

.هر کلاس تنها از یک ابستراکت کلاس می تواند ارث بری داشته باشد

.این کلاس ها در داخل خود می توانند متد و پراپرتی پیاده سازی نمایند

:Person کلاس

Public   abstract  class Person

{

Public    string  Name{get;set;}

Public    string  Family{get;set;}

Public    abstract   string  FullName{get;set;}

}

:Person کلاس استیودنت اینهریت شده از کلاس

Class   Student:Person

{

Public  override  string  FullName

{

get

{

return String.Format("{0}{1}",Name,Family);

}

set

{

throw  new  NotImplementedException();

}

}

نحوه ی فراخوانی مثال بالا در کلاس پروگرام

Student  Student_1=new Student();

Student_1.Name="Shahla";

Student_1.Family="Kazemi";

console.writeline(Student_1.FullName);

                                                                                                                                                                                     Static کلاس های   

.کلاس هاس استاتیک نیاز به ساختن شی ندارند

.در اعضا استاتیک فقط از اعضای استاتیک می توان استفاده نمود

.در اعضا غیراستاتیک می توان از اعضا استاتیک و غیراستاتیک استفاده نمود

:مثال

Public   static  class  Tools

{

Public static string  AddTag(string  tag,string Value)

{

return string.Format("<{0}>{1}</{0}>",tag,value);

}

}

استفاده از کلاس تولز بدون ایجاد شی از کلاس

console.writeline(Tools.AddTag("P","Body"));

console.readkey();

بحث شمارشی کردن کلاس ها و متدها

برای شمارشی کردن ابتدا باید سربرگ زیر را اضافه کنیم

Using   system.collections;

:Person کلاس

class Person

{

//متد شمارشی تست

public IEnumerable Test()

{

//ایجاد آرایه استیرینگ

string [] List_2=new string[]{"sara","shirazi","sohrab"};

//نمایش مقادیر آرایه با استفاده از یلد ریترن

for(int i=0;i<List_2.Length;i++)

{

yield return List_2[i];

}

}

}

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

کار شمارشی کردن را انجام می دهد Yield return

:کلاس دیتا

class Data

{

 //متد شمارشی تست 2

public  IEnumerable Test_2()

{

Yield return "121";

Yield return "computer";

Yield return "c#";

}

}

 

کلاس نیودیتا که قانون اینترفیس آی اینام ریبل را می پذیرد این کلاس شمارشی می باشد

Class    NewData:IEnumerable

{

//متد شمارشی

Public   IEnumerator   GetEnumerator()

{

Yield    return   "121";

Yield    return   "computer";

Yield    return  "C#";

}

}

نحوه ی استفاده مثال های بالا در بدنه پروگرام

NewData  Data_2=new NewData()

foreach (string str  in Data_2)

{

console.writeline(str);

}

Data  Data_1=new Data();

foreach (string  str  in Data_1.Test_2())

{

console.writeline(str);

}

 

معیار برابری در سی شارپ

,  استفاده می نماییم ما این کد را نمی توانیم تغییر دهیمGetHashCode برای معیار برابری در زبان سی شارپ از

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

Public    static   bool  oPerator==(person  P1,person  P2)

{

Return  P1.Equals(P2)

}

Public    static   bool  oPerator!=(person  P1,person  P2)

{

Return  P1.Equals(P2)

}

 

 

:   کار کنیم و معیار برابری را تعریف نماییمEquals روش دیگر این است که ما روی

 

Public    bool   Equals (Person   other)

{

If (this.Name==other.Name && this.Family==other.Family)

{

Return    true;

}

Return  false;

:روش استفاده و فراخوانی گت هش کود و ایکوال  در کلاس پروگرام

Person    oPerson=new   Person("Shahla","Shirazi");

Person    oPerson_2=new   Person("Shahla","Shirazi");

Console.writeline(oPerson.GetHashCode());

Console.writeline(oPerson_2.GetHashCode());

Console.writeline(oPerson.Equals(oPerson_2));

 

 

                                                                                                                                                                                                  

 

Stream Writer

  وسلام داخل فایلی که ایجاد می شود قرار می گیردHello World  در این مثال یک فایل در درایو دی ایجاد می شود وکلمه

 

StreamWriter   oSW=new   StreamWriter   ("D:\\Test.txt",true,system.Text.Encoding.UTF8);

Try

{

oSW.writeline("Hello World!");

oSW.writeline("سلام");

}

Catch (Exception   ex)

{

Console.writeline(ex.Message);

}

Finally

{

oSW.close();

oSW.Dispose();

}

 

Stream Reader

:نحوه ی خواندن از یک فایل

خوانده شده و در کنسول نمایش داده می شود Text.txtدر مثال زیر اطلاعات از فایل

StreamReader  oSR=new  StreamReader("D:\\Test.txt");

Try

{

While(!oSR.EndOfStream)

{

Console.Writeline(oSR.ReadToEnd());

}

}

Catch  (Exception   ex)

{

Console.Writeline(ex.Message);

}

Finally

{

If  (oSR!=null)

{

oSR.close();

oSR.Dispose();

}

}

Xml

.زبان ایکس ام ال بعد از زبان اچ تی ام ال ارايه گشت و یک زبان قدرت مند می باشد

Xml نحوه ی ایجاد یک فایل  

روی نام پروژه راست کلیک می کنیم روی گزینه اد کلیک می کنیم و بعد روی نیو آیتمز کلیک می نماییم کلمه  ایکس ام ال را سرچ می نماییم و بعد ایکس ام ال فایل را انتخاب می کنیم و یک نام برای آن درنظر می گیریم

<People>

  <Person>

  <Name>Amir</Name>

<Family>Chabok</Family>

</Person>

  <Person>

  <Name>Shahla</Name>

<Family>Shirazi</Family>

</Person>

</People>

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

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

[serializable]

Public class Person

{

()Public Person

}

{

(Public  Person(string name,string family

}

;this.Name=name

;this.Family=family

{

{;Public String Name{get;set

{;Public String Family{get;set

()Public override string ToString

}

{;(return  string.Format("Name:{0}\r\n Family:{1}\r\n",this.Name,this.Family

{

}

وارد کلاس پروگرام می شویم و سربرگ های زیر را اضافه می نماییم

using System.Xml;

using System.Xml.Serialization;

using System.Io;

:نحوه ی استفاده آن در برنامه

Person oPerson=new Person("shahla","sohrabi");

XmlSerializer   oXSer=new XmlSerializer   (typeof(Person));

//می خواهیم یک فایل با نام مای ایکس ام ال برایمان ایجاد نماید

StramWriter  oSW=new  StreamWriter("D:\\MyXml.xml");

try

{

oXser.Serialize(oSW,oPerson);

}

catch (Exeption ex)

{

console.writeline(ex.Message);

}

finally

{

if(oSW!=null)

{

oSW.close();

oSW.Dispose();

}

به برنامه ادد می کنیم و سربرگ های زیر را به آن اضافه می نماییمPersonsیک کلاس

using System.Xml;

using System.Xml.Serialization;

using System.Io;

  // کلاس افراد که سرالایزیبل است
  // این کلاس از اینترفیس آی لیست جنریک پرسون اینهریت شده است

[Serializable]

public class Persons :IList<Person>

{

// سازنده پیش فرض که در   شی  ایجاد شده از ایکس ام ال سرالایز

// با نام دلخواه نیو و مقدار دهی میشود

public Persons()
        {
            xmlSer = new XmlSerializer(typeof(Persons),new XmlRootAttribute(this.GetType().Name));
        }

         تعریف یک شی از کلاس ایکس ام ال سرالایزر//

;XmlSerializer xmlSer

        ایجاد یک شی از لیست جنریک از پرسون//

;()<List<Person> InnerList = new List<Person

        (public int IndexOf(Person item
        }
            ;()throw new NotImplementedException
       {

        (public void Insert(int index, Person item
        }
            ;()hrow new NotImplementedException
        {

       (public void RemoveAt(int index
}
           ; ()throw new NotImplementedException
        {

      [public Person this[int index
        }
            get
            }
               ; [return InnerList[index
            {
            set
            }
                ;InnerList[index] = value
            {
        {

        (public void Add(Person item
        }
         ;(InnerList.Add(item
        {

       (public void AddPerson(Person item
       }
       ; ("Load("C:\\PersonsList.xml
            ;(InnerList.Add(item
        ;  ( "Save(@"C:\PersonsList.xml
        {

        ()public void Clear
       }
            ;()throw new NotImplementedException
        {

        (public bool Contains(Person item
        }
           ; ()throw new NotImplementedException
        {

       (public void CopyTo(Person[] array, int arrayIndex
        }
            ();throw new NotImplementedException
        {

        public int Count
        {
           } ;get { return InnerList.Count
        }

        public bool IsReadOnly
        {
        {  ; ()get { throw new NotImplementedException
       {

       (public bool Remove(Person item
        }
          ;  ()throw new NotImplementedException
       {

        ()public IEnumerator<Person> GetEnumerator
        }
           ; ()return InnerList.GetEnumerator
        {

        ()System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator
        }
          ;()return InnerList.GetEnumerator
       {
    

        متد ذخیره  افراد در فایل ایکس ام ال//

(public void Save(string SPath
}
            ((using (StreamWriter SWriter_2 = new StreamWriter(SPath
            {
          ;   ( xmlSer.Serialize(SWriter_2, this
            {
        {

        متد فراخوانی افراد از فایل ایکس ام ال//

(public void Load(string SPath
      }
             ((using (StreamReader SReader_2= new StreamReader (SPath
            }
         ;  (Persons Temp=(Persons)    xmlSer.Deserialize(SReader_2
            ;this.InnerList = Temp.InnerList
            {
    {

        متد اورراید تو استرینگ//

()public override string ToString
       }
            ;string Temp = string.Empty

            (foreach (Person  P in this
           }
             ;  (Temp += string.Format("{0}\r\n",P
            {
            ;return Temp
       {
  {

{

فراخوانی در کلاس پروگرام

          ; ()Persons List = new Persons

;(("List.Add(new Person("Ali", "Jahanshiri
;(( "List.Add(new Person("Reza", "Sadeghi
          ;(( "List.Add(new Person("Mohamad", "Alavi

         ;(  "List.Save(@"C:\PersonsList.xml

   ;  (  "List.Load("C:\\PersonsList.xml

        ;   (Console.WriteLine(List

 

Delegate

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

مثال :عملیات جمع تفریق تقسیم و ضرب و متد نمایش پیغام

 public delegate int Calculator(int A, int B);

 public delegate void ShowMessage(string value);

کلاس تولز که یک متد رشته ها دارد

 

 public class Tools

 {

public string TestDelegate(Calculator CalcDel_1, int a, int   b)

 { return string.Format ("A:{0}B:{1}Calculator(A,B):{2}", a,   b, CalcDel_1(a, b));  }  }

کلاس پروگرام

 

    class Program

    {

        public static int Sum(int a, int b)

        {

            return a + b;

        }

 

        public static int Sub(int a, int b)

        {

            return a - b;

        }

 

        public static int Mul(int a, int b)

        {

            return a * b;

        }

 

       

        public static int Div(int a, int b)

        {

            return a / b;

        }

:نحوه ی استفاده از دلی گیت های تعریف شده در مثال بالا

متد وید نمایش پیغام قرمز

    

   public static void ShowRedMessage(string value)

        {

            Console.BackgroundColor = ConsoleColor.Red;

            Console.WriteLine(value);

            Console.ResetColor();

        }

متد وید نمایش پیغام زرد

        public static void ShowYellowMessage(string value)

        {

            Console.BackgroundColor = ConsoleColor.Yellow;

            Console.WriteLine(value);

            Console.ResetColor();

        }

      متد وید نمایش پیغام آبی

  public static void ShowBlueMessage(string value)

        {

            Console.BackgroundColor = ConsoleColor.Blue;

            Console.WriteLine(value);

            Console.ResetColor();

        }

فراخوانی متدها

        static void Main(string[] args)

        {

        Tools Tools_1 = new Tools();

       Console.WriteLine(Tools_1.TestDelegate(Sum, 20, 10));

       Console.WriteLine(Tools_1.TestDelegate(Sub, 20, 10));

       Console.WriteLine(Tools_1.TestDelegate(Mul, 20, 10));

       Console.WriteLine(Tools_1.TestDelegate(Div, 20, 10));

       ShowMessage SM = new ShowMessage(ShowRedMessage);

       SM += (ShowYellowMessage);

       SM += (ShowBlueMessage);

       SM("Soroush Sarabi");

       Console.ReadKey();

tolooco  :  منبع

خلاصه آموزش سطح متوسط زبان برنامه نویسی سی شارپ

دیدگاه‌ها

دوره MVC پیشرفته

تصویر jamal

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