برای کار با زبان برنامه نویسی سی شارپ باید ابتدا نرم افزار 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 پیشرفته
سلام خشسته نباشید
ببخشید این دوره mvc پیشرفته رو کی میزارید رو سایت بنده زمان عضویتم داره تموم میشه.
سلام
با سلام . زمان دقیقی در دست نیست.
ممنون بابت مطلب مفیدتون.
ممنون بابت مطلب مفیدتون.