
یادگیری سی شارپ از مفاهیم پایه تا پروژه محور: شیگرایی، کار با SQL و LINQ، ORMها (Entity Framework)، ساخت پروژه مدیریت رستوران با گزارشات حرفهای و امکانات کامل!
مشاهده بیشتر
یادگیری MVC Core از مبانی تا پیشرفته: شیگرایی، Routing، Entity Framework، امنیت، تست یونیت، Razor، Ajax، و پروژههای کاربردی! یک دوره کامل برای تسلط بر توسعه وب با ASP.NET Core. به صورت حضوری و آنلاین!
مشاهده بیشتریادگیری سی شارپ رایگان
در این دوره آموزشی به آموزش گام به گام برنامه نویسی ویندوز و وب با زبان جدید سی شارپ C# می پردازیم . با ارایه مثال های عملی و سورس کد در هر بخش .
فضاهای نامی یا Namespace در سی شارپ

فضاهای نامی ( Namespace ) ابزاری برای دسته بندی کلاس ها در زبان سی شارپ هستند. همانند دیگر اجزای یک پروژه نرم افزاری، تعداد کلاس ها نیز ممکن است زیاد باشد و یک راهکار مناسب و منطقی برای مدیریت دسته بندی و همچنین کنترل دسترسی به آنها نیاز داریم که "فضاهای نامی" به همین منظور تهیه شده اند.

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

برای استفاده از namespace ای که قبلاً در فایل دیگری ایجاد شده و مورد استفاده قرار گرفته، لازم است از کلیدواژه ی using استفاده کنید (با این کار نشان می دهید که فضای نامی که اکنون دارید به کار می برید، قبلاً در جای دیگری تعریف شده). برای انجام این کار، ابتدا کلیدواژه ی using و به دنبال آن اسم فضای نامی را تایپ کنید.

برخلاف متدهای کلاس، نمی توان چندین کلاس هم نام داخل یک فضای نامی داشت (بر خلاف حالتی که چندین متد هم نام داخل یک کلاس می توان ساخت). به عبارت دیگر نمی توان دو کلاس هم نام در یک محدوده (scope) ایجاد کرد. یکی از گزینه های پیش رو این است که هر کلاس هم نام را در فضای نامی جداگانه قرار دهید.

دسترسی به فضای نامی که آن فضای نام خود در دل فضای نام های دیگر گنجانده شده بسیار دشوار و زمان بر است . برای حل این مشکل می توان از نام مستعار یک فضای نام بهره جست ( که در واقع میانبری برای دست یافتن به فضای نامی است که در دل فضای نامی دیگر جای گرفته). برای ایجاد نام مستعار، کلیدواژه ی using و به دنبال آن اسم دلخواه و علامت = و سلسله مراتب namespace را تایپ کنید.

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

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

همانطور که در بخش پیشین گفتیم کتابخانه ها ابزارهای کمکی هستند که می توانیم در پروژه های دلخواه از آن ها استفاده کنیم. برای زبان های برنامه نویسی رایج در دنیا کتابخانه های بسیاری موجود و در دسترس است که بسیاری از آن ها رایگان نیز هستند. در این بخش از آموزش سی شارپ می خواهیم روش ساخت یک کتابخانه سفارشی را با هم بررسی کنیم.

در محیط ویژوال استودیو می توان چندین مدل پروژه با زبان برنامه نویسی سی شارپ ایجاد نمود که یکی از آن ها کتابخانه است. کتابخانه ها به عنوان ابزارهای کمکی قدرتمند راهکارهای سودمند و موثری در پیاده سازی پروژه های نرم افزاری دارند. گاهی ممکن است نوع پروژه ای که قبلا ساخته و ایجاد کرده اید را بخواهید به حالت کتابخانه تغییر دهید.

در محیط ویژوال استودیو می توان چندین مدل پروژه با زبان برنامه نویسی سی شارپ ایجاد نمود که یکی از آن ها کتابخانه است. کتابخانه ها به عنوان ابزارهای کمکی قدرتمند راهکارهای سودمند و موثری در پیاده سازی پروژه های نرم افزاری دارند.

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

برخلاف خیلی از زبان های برنامه نویسی دیگر مثل : C++ یا (Object) Pascal (Delphi), زبان C# فاقد کتابخانه ی توکار (متعلق به خود) می باشد . لازم به ذکر است که این فقدان به معنای کارایی و قابلیت کمتر و ضعف برنامه C# نیست . بلکه زبان C# به دلیل همین انعطاف پذیری بالایی که دارد، می تواند از کتابخانه های دیگر زبان های برنامه نویسی نهایت بهره را ببرد.

در زبان سی شارپ می توان از کتابخانه های نوشته شده به زبان های دیگر نیز استفاده کرد. در این مقاله مثالی از کاربرد یک کتابخانه به زبان ویژوال بیسیک را در یک برنامه سی شارپ با هم مرور می کنیم.

یک از اهداف اصلی که در.NET دنبال می شود, فراهم کردن امکان همکاری بین زبان های مختلف است (مانند به اشتراک گذاری کد). یکی از روش هایی که این امر را امکان پذیر می کند, توانایی استفاده از قابلیت های یک زبان در برنامه ای است که توسط زبان برنامه نویسی دیگر نوشته شده. به طور مثال, می توان از (کتابخانه ی غنی) توابع Visual Basic در یک برنامه ی کاربردی سی شارپ بهره جست. به این خاطر که هیچ کتابخانه ای صد در صد کامل نیست, ممکن است به قابلیتی نیاز پیدا کنید که در خود زبان انتخابی (زبانی که هم اکنون برای برنامه نویسی به کار می برید) موجود نباشد.
استاتیک در سی شارپ

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

متدهای ایستا یا static method در واقع همان رفتارهای استاتیک یک کلاس هستند که بدون نیاز به نمونه سازی در قالب یک شی و تنها با استفاده از نام خود کلاس قابل فراخوانی و استفاده هستند.

چنانچه کلاسی در سی شارپ به صورت استاتیک تعریف شود تمام اعضای آن باید از نوع استاتیک باشند. این بدان معناست که هیچ عضو معمولی (غیر استاتیک) نمی توان در آن کلاس قرار داد. در این بخش از آموزش سی شارپ به این موضوع خواهیم پرداخت.

در هر زبان برنامه نویسی اجزای برنامه دارای یک سطح و محدوده دسترسی و همچنین طول عمر می باشند. در زبان سی شارپ نیز برای هر متغیر یک بازه یا scope و همچنین طول عمر یا lifetime تعریف شده است.

برای تعریف متغیر ثابت، کافی است کلید واژه ی const را در سمت چپ متغیر مربوطه تایپ کنید. توجه داشته باشید که هنگام تعریف یک ثابت، باید آن را با مقدار مناسب و مقتضی مقداردهی اولیه کرد...
ترکیبات کلاس ها در سی شارپ

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

به منظور ایجاد کلاس جدید، در پنجره ی Solution Explorer، روی اسم پروژه راست کلیک کرده، اکنون نشانگر موس را روی Add قرار دهید و گزینه ی class را انتخاب کنید...

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

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

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

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

دستورات زبان C# را می توانید با هر نوع ادیتور متنی مثل Windows Notepad نوشته و سپس به وسیله برنامه CSC.exe که کامپایلر خطی دستورات C# بوده و همراه با چهارچوب کاری .NET بر روی سیستم نصب می شود، کامپایل و اجرا نمایید. اما اکثر افراد ترجیح می دهند از یک IDE یا محیط توسعه یکپارچه (Integrated Development Envirment) استفاده کنند که مایکروسافت چندین برنامه را برای این منظور ارائه داده است. گل سرسبد این برنامه ها، Visual Studio است که قابلیت اجرای تمامی امکانات چهارچوب کاری .NET را دارا می باشد. این برنامه بسیار پیشرفته بوده و در نسخه های مختلفی ارائه شده است.

اگر شما قبلا نیز اقدام به یادگیری یک زبان برنامه نویسی کرده باشید، حتما می دانید که اینگونه آموزش ها معمولا با یک برنامه ساده به نام “Hello word” شروع می شوند.

در بخش قبل، در اولین برنامه C# ای که طراحی کردیم، یک نوشته را در خروجی چاپ نمودیم. برای درک بستر خروجی مثال، در درس قبلی به تشریح کدهای نوشته شده پرداخته نشد، اما در این درس به بررسی کد مثال می پردازیم. همانطور که از مشاهده کدهای مثال درس متوجه شده اید، برخی از خط های کد مثال بسیار شبیه هم بودند، بنابراین در توضیح، آن ها را در کنار همدیگر قرار داده ایم.

انواع داده ای یا Data Types در تمامی قسمت های یک زبان برنامه نویسی مثل C# استفاده می شود. به دلیل این که زبان C#، یک زبان قدرتمند داده ای است، بایستی هر زمان که یک متغیر را تعریف و استفاده می کنید، به کامپایلر اطلاع دهید آن متغیر از چه نوع داده ای است. به نحوه و تعیین نوع داده ای یک متغیر به طور کامل در بخش متغیرها (Variable) خواهیم پرداخت. در این درس به طور کلی به بررسی انواع داده ای مهم زبان C# و نحوه کارکرد آن ها می پردازیم.

یک متغیر یا Variable بخشی از حافظه سیستم است که همانند یک اتاق برای نگهداری اطلاعات خاصی به کار می رود. متغیرها اساس کار برنامه های C# بوده و به صورت زیر، قابل تعریف هستند : < data type > < name > ;

یکی از مهم ترین ساختارهای دستوری در هر زبان برنامه نویسی از جمله C#، دستور if است. توانایی ساخت دستورات شرطی کلی از مهم ترین کارهایی است که بایستی بتوان با زبان ها ی برنامه نویسی انجام داد. در C#، ساختار شرطی if بسیار ساده و کاربردی است. اگر از شاختار دستوری شرطی if در هر زبان برنامه نویسی دیگری استفاده کرده باشید، به راحتی می توانید در C# نیز از آن بهره بگیرید. ساختار دستور شرطی if نیاز مند یک مقدار boolean است که یا true است یا false.

دستور Switch همانند مجموعه ای از دستورات پشت سر هم if عمل می کند. دستور Switch درواقع لیستی از حالت های ممکن است که برای هر حالت یک دستور یا کدی جهت اجرا پیش بینی شده است. این دستور همچنین یک حالت default یا پیش فرضی دارد که در صورتی که هیچ یک از حالات آن true نباشد، اجرا خواهد شد.

کی دیگر از تکنیک های اصلی در زمان نوشتن نرم افزارها، امکان ایجاد حلقه ها دستوری یا looping است. این نوع دستورات امکان تکرار بلوک هایی از کد برای دفعات دلخواه را می دهند. برای مثال ما می خواهیم گروهی از دستورات تا زمانی که مقدار یک متغیر مثلا کمتر از 10 است، تکرار شود، در این حالت بایستی از حلقه ها در C# استفاده کنیم.

یک تابع یا Function در C#، به شما امکان می دهد مجموعه ای از دستورات را درون یک ظرف مشخص قرار داده و در هر جای برنامه که لازم داشتید، با به کار بردن نام تابع آن ها را فراخوانی کنید. در برنامه نویسی پروژه ها، شما گاهی مجبور می شوید تا یک قطعه کد را در چندین محل مختلف مورد استفاده قرار دهید، در این حالت است که تابع ها (Function) به کمک شما می آیند. از طرف دیگر، به وسیله توابع شما می توانید کدهای پروژه خود را به بخش های مجزا و قابل تفکیک از هم تبدیل کنید.

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

آرایه ها Arrays مجموعه ای از آیتم ها مثل متن String می باشند. شما می توانید از آرایه ها برای قرار دادن چندین متغیر همسان در یک گروه و سپس انجام اعمال خاصی بر روی آن ها مثل مرتب سازی یا sorting استفاده کنید.

به طور کلی یک آبجکت برای اینکه بتواند property و فیلدهای اختصاصی داشته باشد، نوع آن اول باید تعیین شود. حال anonymous type ها این امکان را برای آبجکت فراهم می کند که بدون اینکه نوع آن صراحتا مشخص شده باشد، تعدادی property با سطح دسترسی readonly را کپسوله سازی کند. لازم به ذکر است که نوع هر property توسط کامپایلر حدس زده می شود
آموزش کار با کلاس ها در C#

در این درس قصد داریم تا شما را با مفهوم کلاس Class در C# و کاربرد آن ها آشنا کنیم. همچنین به بیان نحوه تعریف کلاس ها در برنامه و تعیین خواص و متدها برای آن ها خواهیم پرداخت.

ویژگی (Property) در C# به شما امکان کنترل نحوه دسترسی و تغییر متغیرهای یک کلاس Class را می دهند. استفاده از ویژگی ها در C#، راه توصیه شده و درست جهت دسترسی به متغیرهای یک کلاس، به وسیله متدها یا توابع خارج از کلاس جاری، در زبان برنامه نویسی شی گرا object oriented می باشد.

تابع سازنده یا Constructor متد ویژه ای است که هر بار به محض ساخته شدن یک شی یا object از کلاس، اجرا می شود. درواقع از تابع سازنده برای مقداردهی اولیه متغیرها یا اجرای یک کد ثابت استفاده می شود.

بسیاری از زبان های برنامه نویسی از تکنیک ای به نام پارامترهای پیش فرض /اختیاری (defult/optional parameters) پشتیبانی می کنند. این تکنیک به برنامه امکان می دهد تا با تعیین مقدار پیش فرض برای یک یا چند پارامتر تابع، آن ها را در هنگام مقدار دهی اختیار کند. این روش برای افزودن انعطاف پذیری به کد برنامه، بسیار کاربرد دارد.

بازه دسترسی یک کلاس، متد، متغیر یا ویژگی در C#، روش و امکان دسترسی به آن عنصر و دیده شدن در سطح کل برنامه را تعیین می کند. به این امکان در اصطلاح سطح دسترسی یا access modifier می گویند.

رایج ترین راه کار با یک کلاس، ساخت یک نمونه از آن (شی/object) و سپس کار کردن با object مورد نظر است. در بیشتر موارد این فرآیند انجام می گردد. یعنی ساخت چندین نمونه مختلف از یک کلاس و سپس استفاده از هر کدام از آن ها در یک قسمت و یا منظور خاص. اما مواردی وجود دارد که تمایل دارید کلاسی داشته باشید که بدون نمونه سازی از آن یا حداقل بدون نیاز به ساخت شی از آن، بتوانید از اعضا و متدهای آن استفاده کنید.

یکی از جنبه های کلیدی زبان های برنامه نویسی شی گرا Objected Oriented Programming (OOP) از جمله C# بر پایه آن بنا شده است، مفهوم ارث بری یا Inhertance می باشد. ارث بری یعنی تولید کلاس هایی جدید که برخی از ویژگی های خود را از کلاس مادر Parent Class به ارث برده اند.

کلاس های مطلق یا پایه (Abstract Class) در زبان C#، که با کلمه کلیدی abstract مشخص می شوند، کلاس های پایه و مادر در یک سلسله مراتب درختی کلاس ها می باشند. به عبارت دیگر این کلاس ها، کلاس مرجع بوده و بقیه کلاس ها به ترتیب از روی این کلاس به ارث می روند.

در درس قبلی، با مفهوم کلاس پایه Abstract Class در زبان C# آشنا شدیم. در این درس، قصد داریم مثال درس قبل را کمی گسترش داده و در آن از متدهای ثابت Abstract Methods نیز استفاده کنیم.

در درس قبل، به بررسی کلاس های پایه یا Abstract ها در C# پرداختیم. Interface ها در C# نیز تا حد زیادی مشابه Abstract Class ها بوده و در این ویژگی که نمی توان از روی آن یک نسخه یا شی ساخت با هم یکسان هستند.
آموزش اشکال زدایی Debugging در C#

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

اولین چیزی که بایستی در عملیات اشکال زدایی کدهای C# یا Debugging بایستی بیاموزید، استفاده از BreakPoints ها است. BreakPoints دقیقا همان کاری را انجام می دهد که از نام آن می توان فهمید. BreakPoint نقطه ای در کد شما را تعیین می کند که در آنجا کامپایلر توقف نموده و اجرای برنامه موقتا استپ می شود. در این مکان می توانید به بررسی کدهای خود پرداخته و مقادیر متغیرها و عبارات را در برنامه چک کنید.

در این درس، به آموزش نحوه حرکت بین کدها در زمان Debug برنامه های C# خواهیم پرداخت.

در هنگام انجام عمل اشکال زدایی کدها یا Debugging در ویژوال استودیو، پنجره tool window در قسمت پایین برنامه عوض شده و پنجره های جدیدی ظاهر می شوند (علی رغم این که شما آن ها را خاموش یا غیر فعال کرده باشید). پنجره های جدید باز شده با نام “Locals”، “Watch”، “Call Strack” و “Immediate window” بوده، که مرتبط با عملیات Debugging هستند. در این بخش به بررسی هریک از ابزارها خواهیم پرداخت.

آموزش پیشرفته تر کار با Breakpoint در Debug کدهای C#
آموزش مباحث پیشرفته در C#

Enumeration ها، مجموعه ای از مقادیر با نام (named value) هستند که متناظر با مجموعه ای از اعداد، معمولا از نوع integer می باشند. Enumeration ها در موارد مختلفی کاربرد دارند، مثلا زمانی که می خواهید قادر باشید از بین مجموعه ای از مقادیر ثابت، به راحتی مقدار مورد نظر خود را انتخاب کرده و آن را متناظر با یک مقدار عددی قرار دهید.

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

ساختارها یا Structs یک جایگزین سبک حجم (light weight) برای کلاس ها Class در زبان C# هستند. دلیل بیان این مسئله، کمی نیازمند بحث تکنیکال است، اما اگر بخواهیم خلاصه بیان کنیم، نمونه های ساخته شده از یک کلاس instances Class (بر روی حافظه) در یک ساختار درختی یا heap قرار می گیرند، در حالی که نمونه های ساخته شده از یک Structs به صورت Stack ذخیره می شوند.
آموزش کار با XML در C#

XML مخفف عبارت Exteraible Markup Language یا زبان نشانه گذاری قابل توسعه است. زبان XML ، یک فرمت گسترده و رایج برای نقل و انتقال اطلاعات (data) می باشد، بیشتر به این دلیل که به راحتی برای هم انسان و هم ماشین قابل خواندن و درک است.

کلاس XMLDocument کل محتویات فایل XML را خوانده و در حافظه سیستم قرار می دهد. سپس به شما امکان می دهد به راحتی درون فایل XML به جلو و عقب حرکت کرده و حتی با استفاده از تکنولوژی XPath ، جستجو یا query مورد نظر خود را بر روی فایل انجام دهید.

همانطور که در درس قبلی اشاره کردیم، کلاس XMLDocument حافظه بیشتری از کلاس XMLReader مصرف کرده و به طبع کند تر از آن می باشد. اما به هر حال، به چند دلیل، کار با کلاس XMLDocument کمی ساده تر بوده و در برخی موارد نیاز به نوشتن کد کمتری خواهد داشت.

در درس قبلی، از کلاس XMLDocuments برای خواندن فایل XML استفاده کردیم. یک کلاس جدید را در مثال درس قبل با نام کلاس XmlNode معرفی کردیم که برای تجزیه و خواندن فایل های XML بسبار ضروری است. به طور کلی، فایل XML به یک XmlNode که المنت اصلی یا root فایل است، تجزیه شده و سپس به وسیله آن می توانید با استفاده از خاصیت childNodes به عناصر فرزند المنت اصلی دسترسی داشته باشید. همچنین، کلاس XmlNode امکان دسترسی به اطلاعات بسیار دیگری از جمله نام تگ ها یا tag name، خواص یا attributes، متن درون تگ ها یا inner text وجود ساختار XML را نیز به ما می دهد.

در درس های قبل، از کلاس XnlDocument برای استخراج اطلاعات از فایل xml استفاده کردیم. ما این کار را با چندین بار فراخوانی خاصیت ChildNodes انجام دادیم که به علت ساده بودن فایل به کار رفته در مثال، کار ساده ای بود. روش فوق چندان خوانایی مناسبی برای کد ما ندارد، بنابراین در این درس به آموزش راه حلی دیگری خواهیم پرداخت.

در درس های قبلی، به آموزش نحوه خوانمدن فایل های XML پرداختیم، اما در این درس و درس های بعدی قصد داریم تا بر روی نوشتن فایل های XML، کار کنیم. از آنجایی که زبان XML از متن ساده تشکیل شده است، شما می توانید به سادگی تگ های XML را درون یک فایل نوشته و سپس پسوند یا extensim با مقدار XML را به آن بدهید، اما مطمئن تر است که انجام این کار را به دست چهارچوب کاری .NET بسپارید.

آموزش نوشتن فایل XML با استفاده از کلاس XmlDocument در زبان C#
امکانات جدید در C# 3.0

همزمان با ارائه نسخه 3.5 چهارچوب کاری .NET و ویژوال استودیو 2008، مجموعه ای از قابلیت های جدید تحت نام مجموعه کد “Orcas” ، به نسخه C# 3.0 اضافه شده است. در درس های این بخش، قصد داریم تا با مهم ترین ویژگی های جدید اضافه شده که تلاشی جهت بالا بردن قابلیت کدنویسی کاربران است آشنا شویم.

یکی از بزرگ ترین مشکلاتی که برنامه نویسان برای نوشتن کدهای شی گرا یا object oriented داشتند، امکان تعیین خواص عمومی(Public Properties) برای فیلدهای خصوصی (private fields) بود. این کار کمی خسته کننده بود، زیرا تغییر با تمامی خواص به صورت یک متد get و set ساده با نگاشت به فیلد خصوصی تعریف می شد و هیچ هوشمندی خاصی در کار نبود.

در C# 3.0، هر دو کار مقداردهی اولیه یا initializing اشیاء (objects) و مجموعه ها (collections) بسیار ساده تر شده است و کلاس ساده Car Class را که در آن به وسیله خواص اتوماتیک، متغیرهای خود را همانند درس قبل مقداردهی کرده ایم

همانطور که C# 3.0 یک روش جدید را برای مقداردهی اشیاء objects ارائه داده است، ساختار دستوری جدیدی نیز برای مقداردهی اولیه list ها با مجموعه ای از آیتم ها، در دسترس است.

قابلیت جدید دیگر زبان C# 3.0، متدهای توسعه یافته یا Extensim Methods است. این ویژگی به شما امکان می دهد تا قابلیت های جدیدی را به یک نوع داده ای یا type موجود اضافه کنید، بدون این که نیاز داشته باشید آن type را به صورت یک زیرمجموعه یا کلاس به ارث رفته درآورد یا مجددا کامپایلش کنید. به عبارت دیگر می توانید عملکردهای جدیدی را به یک نوع داده ای اضافه کنید، بدون این که نسخه اصلی آن را تغییر دهید.
آموزش کار با فایل ها در C#

در این بخش ، قصد داریم تا نحوه خواندن (Reading) و نوشتن (Writing) در فایل ها، به وسیله زبان C# را آموزش دهیم. خوشبختانه، زبان C# با امکاناتی که ارائه داده است، انجام این امور را بسیار ساده کرده است. کلاس File Class از System.IO ، تقریبا شامل تمام چیزهایی است که برای خواندن و نوشتن فایل ها در C# نیاز داریم.

در درس قبلی، به آموزش نحوه خواندن و نوشتن در فایل های ساده متنی توسط C# پرداختیم. ما برای آموزش از کلاس File Class برای اولین بار استفاده کردیم، اما این کلاس قابلیت های بسیار بیشتری از خواندن و نوشتن فایل های متنی دارد.

کلاس های File Class و Directory Class که در بخش های قبل استفاده کردیم، برای کار مستقیم با فایل ها و دستکاری پوشه ها، بسیار مناسب هستند. اما گاهی اوقات نیاز داریم تا اطلاعاتی را درباره یک فایل یا پوشه بدست آوریم، به جای این که لزوما آن را تغییر دهیم. در این گونه موارد نیز System.IO namespace به کمک آمده و کلاس های FileInfo Class و DirectoryInfo Class را در اختیارمان قرار می دهد. در این درس قصد داریم تا با ارائه مثال هایی، نحوه کار با این کلاس ها را آموزش دهیم.
آموزش Reflection در زبان C#

"reflection به وسیله ای گفته می شود که در آن، برنامه کامپیوتری می تواند رفتار خود را مشاهده کرده و در صورت نیاز ساختار و عملکرد خود را تغییر دهید."

کلاس Type Class اساس و پایه مفهوم Reflecton در زبان C# است. کلاس Type به عنوان اطلاعات لازم اجرا، برای یک اسمبلی، ماژول و یا type استفاده می شود.

تا کنون در چهارچوب کاری .NET با نمونه ها types و اشیای object ای که از قبل نمونه سازی شده اند، کار کرده ایم. اما به وسیله قابلیت Reflection، می خواهیم عمل نمونه سازی را در هنگام اجرا یا RunTime انجام دهیم و برای این منظور داشتن نام کلاسی که می خواهیم از آن نمونه بسازیم، ضروری است. چندین راه برای انجام کار فوق وجود دارد. اما من روشی را ترجیح می دهد که در آن یک رفرنس به تابع سازنده شی یا Constructor ایجاد کرده و آن را فعال می کنیم. سپس مقدار برگشتی از تابع را به عنوان نمونه خود به کار می بریم.
جمع بندی آموزش سی شارپ C#

کار با پایگاه داده (C# ADO.NET)

در تقریبا تمامی برنامه های امروزی لازم است تا حجم متعارفی از داده ها (کم یا زیاد) را مدیریت کرد. این مدیریت شامل خواندن، افزودن، ویرایش و یا حذف داده می تواند باشد. برای این منظور در بستر دات نت کتابخانه ای غنی به نام ADO.NET طراحی گردیده که به ما در پیاده سازی فرآیندهای مربوط به این امر کمک زیادی خواهد کرد.

برای ارتباط با هر پایگاه داده و انجام هر گونه عملیاتی لازم است تا به آن پایگاه داده وصل شویم. در ADO.NET جهت اتصال به پایگاه داده SQL Server از شی SqlConnection استفاده می شود. در این قسمت از آموزش سی شارپ به بررسی این شی و روش کار با آن خواهیم پرداخت.

همانطور که پیش از این در آموزش پایگاه داده در سی شارپ گفتیم برای اجرای دستورات پایگاه داده بایستی پس از اتصال به پایگاه داده دستور مربوطه را در قالب یک شی SqlCommand از طریق اتصال ایجاد شده توسط SqlConnection اجرا کنیم. در این بخش از آموزش ADO.NET در سی شارپ به بررسی روش انجام این کار خواهیم پرداخت.

پس از بررسی اصول اولیه کار با پایگاه داده، در این بخش از آموزش پایگاه داده در سی شارپ می خواهیم به روش کار با شی SqlDataReader که تنها ویژه خواندن داده ها از پایگاه داده است بپردازیم.

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

بسیاری از دستورات اجرایی روی پایگاه داده نیاز به پارامترهای داده ای دارند که لازم است فراهم شده و هنگام اجرای دستور مقادیرشان به دستور مربوطه ارسال شده باشد. در این بخش از آموزش سی شارپ و مباحث پایگاه داده در سی شارپ (ADO.NET) به این موضوع و کار با کلاس SqlParameter خواهیم داشت.

یکی از مهم ترین روش های اجرای یک دستور در پایگاه های داده رایج در جهان، استفاده از Stored Procedure است. مزایای زیادی در این روش وجود دارد که شاید مهم ترین آن ها مدیریت و دسته بندی بهتر کدهای پایگاه داده در مقایسه با روش قبلی و همچنین سرعت اجرا و کارایی بالاتر است. در این بخش از آموزش کار با پایگاه داده در سی شارپ به این موضوع خواهیم پرداخت.
آموزش کدهای پروژه مربوط به C#

امروزه قابلیت خواندن داده از فایل های مختلف امری بسیار معمول می باشد. مقاله ی آموزشی حاضر نحوه ی خواندن متن/محتوا از فایل های Text، Word و PDF را تشریح می کند. در زیر به شرح هر یک به تفصیل می پردازیم.

در این آموزش با استفاده از پکیج facebook ناگت در اپلیکیشن C# خود و دسترسی به مقدار پارامتر/متغیر querystring، قابلیت هویت سنجی (authorization) کاربر برای ورود به سایت (از طریق صفحه ی ورود و login سایت facebook) را پیاده سازی می کنیم.

این آموزش نحوه ی پیاده سازی یک جدول (مبتنی بر) HTML در بدنه ی Email به صورت داینامیک/در زمان اجرای اپلیکیشن با زبان C# را تشریح می کند.

در مقاله ی پیشرو نحوه ی ایجاد یک جدول HTML با چندین سطر که داینامیک بوده و قابلیت تغییر اطلاعات در آن در زمان اجرا وجود دارد را با استفاده از زبان C# به شما آموزش می دهیم.

این آموزش نحوه ی ایجاد یک جدول داینامیک مبتنی بر HTML و ارسال آن در قالب ایمیل با زبان برنامه نویسی C# را آموزش می دهد.

همان طور که می دانید آدرس IP بخش اصلی و جدایی ناپذیر شبکه و اینترنت می باشد. این امر از دیدگاه C# ممکن است خیلی حائز اهمیت نباشد. ابتدا به شرح کتابخانه (namespace) System.Net می پردازیم.

Delegate ها در C# همانند Pointer در C++ است ولی بر خلاف آن حافظه را مستقیما درگیر نمی کند و امکان می دهد به عنوان پارامتر به تابع در C# پاس می دهد.
مباحث پیشرفته C#

صفتها برچسبهایی اعلانی هستند که در انتقال اطلاعات مربوط به رفتارهای عناصر مختلف مانند کلاسها، متدها، ساختارها، شمارندهها، اسمبلیها و ... به زمان اجرا، نقش دارند. شما میتوانید با استفاده از این صفتها اطلاعات اعلانی را به یک برنامه اضافه کنید. این برچسبها با براکت ([]) نمایش داده میشوند و بالای عنصری که قرار است استفاده شود قرار میگیرند.

کلاسهای Collection، کلاسهای مختص به بازیابی و ذخیرهی داده هستند. این کلاسها از انباشتها، صفها، لیستها و جداول درهم پشتیبانی میکنند. بسیاری از این کلاسها رابطهای یکسانی را پیادهسازی میکنند.

اشیاء Reflectionی جهت دریافت اطلاعات مربوط به نوع در زمان اجرا کاربرد دارند. کلاسهایی که امکان دسترسی را برای متادیتای یک برنامهی در حال اجرا فراهم میکنند، در فضای نام System.Reflection قرار دارند. این فضای نام شامل کلاسهایی است که شما میتوانید با کمک آنها اطلاعاتی را دربارهی برنامه به دست آورید و به صورت پویا نوعها، مقادیر و اشیاء را به برنامه اضافه کنید.

Delegateها در C# مشابه با اشارهگرهای توابع در C و C++ هستند. یک Delegate متغیر نوع مرجعی است که این ارجاع به متد را در خود نگهداری میکند. این مرجع را میتوان در زمان اجرا تغییر داد.

متدهای anonymous تکنیکی را فراهم میکنند که با کمک آن میتوان بلوکی از کد را به عنوان یک پارامتر نماینده رد کرد. این متدها درست مانند بدنه متدهای بدون نام هستند.

به اعمال کاربر Event گفته میشود؛ مانند فشردن دکمهی کیبورد، کلیک موس، حرکت موس و ... یا برخی از رخدادها مانند نوتیفیکیشن های تولید شدهی سیستم. برنامهها باید به Event هایی مانند وقفهها پاسخ دهند. Event ها در ارتباطات میان پردازشی کاربرد دارند.

Propertisها اعضای نام دار کلاسها، ساختارها و رابطها هستند. متغیرها یا متدهای عضو یک کلاس یا ساختار Field نامیده میشوند. Propertisها افزونهای از فیلدها هستند که با سینتکس یکسانی میتوان به آنها دسترسی پیدا کرد. این Propertisها از طریق مقداری از فیلدهای خصوصی که میتوان آنها را خواند، نوشت یا دستکاری کرد، از اکسسورها استفاده میکنند.

با کمک Indexer ها میتوان اشیاء را مانند یک آرایه ایندکس کرد. زمانی که Indexer ی را برای کلاسی تعریف میکنید این کلاس مانند یک آرایهی مجازی رفتار میکند. بعد از این کار میتوانید با استفاده از عملگر دسترسی آرایه ([]) به نمونهی این کلاس دسترسی پیدا کنید.

با استفاده از Generic ها میتوانید مشخصات نوع دادهی عناصر برنامهنویسی را در یک کلاس یا یک متد تعریف کنید. به شرط آن که این نوع واقعاً در برنامه استفاده شده باشد. به بیان دیگر با استفاده از Generic ها میتوانید کلاس یا متدی را بنویسید که بتواند در کنار هر نوع دادهای کار کند.

C# زمانی که تابعی از بلوک کد توسط اصلاحکنندهی نا امن نشان شده است، امکان استفاده از متغیرهای اشارهگر را در این تابع فراهم کرده است. کد نا امن یا کد مدیریت نشده بلوکی از کد است که از یک متغیر اشارهگر استفاده میکند.

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