ویژگیهای پیشرفته سیشارپ به شما کمک میکنند تا کدهای بهینهتر، کارآمدتر و قابل نگهداریتری بنویسید. در اینجا چند نمونه از این ویژگیها را معرفی میکنم:
- Async/Await:
این ویژگیها به شما اجازه میدهند تا برنامههای غیرهمزمان بنویسید که میتوانند به طور همزمان چندین کار را انجام دهند بدون اینکه رابط کاربری قفل شود.
- LINQ (Language Integrated Query): LINQ
به شما اجازه میدهد تا دادهها را از منابع مختلف مانند پایگاه دادهها، مجموعهها و XML به صورت یکپارچه و با استفاده از سینتکس مشابه SQL جستجو و دستکاری کنید.
- Delegates and Events: Delegates
به شما اجازه میدهند تا متدها را به عنوان پارامتر به متدهای دیگر ارسال کنید. Events نیز برای مدیریت رویدادها و تعاملات بین اشیاء استفاده میشوند.
- Generics: Generics
به شما اجازه میدهند تا کلاسها و متدهایی بنویسید که با انواع مختلف دادهها کار کنند بدون اینکه نیاز به تکرار کد باشد.
- Reflection: Reflection
به شما اجازه میدهد تا در زمان اجرا اطلاعاتی درباره انواع و اعضای آنها به دست آورید و حتی آنها را تغییر دهید.
- Span and Memory:
این ویژگیها به شما کمک میکنند تا با دادههای حافظه به صورت کارآمدتری کار کنید و از تخصیصهای غیرضروری حافظه جلوگیری کنید.
این ویژگیها به شما کمک میکنند تا برنامههای پیچیدهتر و بهینهتری بنویسید.
اگر می خواهید آموزش ساخت حسابداری شخصی را به صورت پروژه محور را ببینید می توانید وارد کانال سی شارپ و مدرس ایمان مدائنی شوید
1- شروع پروژه حسابداری
2- تکمیل لایه DataLayer
3- الگوی Unit Of Work
4- ایجاد مدیریت اشخاص
5- افزودن و حذف شخص
6- Extension Method
7- ویرایش شخص
8- آموزش Generic Repository
9- کلمه کلیدی Virtual
10- ساخت بخش تراکنش ها
11- ساخت بخش تراکنش جدید
12- گزارش تراکنش ها
13- ویرایش تراکنش ها
14- فیلتر گزارش ها
15- فرم ورود به برنامه
16- چاپ گزارش
17- کلاس های Abstract
18- لایه Business
اکستنشن متد (Extension Method) در سیشارپ یک روش برای اضافه کردن متدهای جدید به نوعهای موجود بدون نیاز به ایجاد یک کلاس مشتق شده یا تغییر در کد اصلی آن نوع است. این متدها به شما اجازه میدهند تا قابلیتهای جدیدی را به کلاسها اضافه کنید، بدون اینکه نیاز به دستکاری در ساختار اصلی آنها داشته باشید.
برای تعریف یک اکستنشن متد، باید یک کلاس استاتیک ایجاد کنید و متدهای استاتیک داخل آن کلاس قرار دهید. اولین پارامتر این متدها باید با کلمه کلیدی this و نوعی که میخواهید اکستنشن متد به آن اضافه شود، مشخص شود. به عنوان مثال:
public static class StringExtensions
{
public static bool IsPalindrome(this string str)
{
int len = str.Length;
for (int i = 0; i < len / 2; i++)
{
if (str[i] != str[len - i - 1])
{
return false;
}
}
return true;
}
}
در این مثال، متد IsPalindrome به نوع string اضافه شده است و میتوان آن را به صورت زیر استفاده کرد:
string word = "level";
bool result = word.IsPalindrome(); // نتیجه true خواهد بود
یک مثال دیگر از اکستنشن متد (Extension Method)
کلاس MyClass
using System;
using System.Globalization;
namespace ExtensionMethod_Example
{
public static class MyClass
{
// هم کلاس static باشد و هم متد .کلاس های static تمام اعضا باید static باشند
// کلمه static مجبور نشوم یک نمونه جدید بسازم
public static string Tooman(int value)
{
return value.ToString("#,0 Tooman");
}
public static string ToRial(this int value)
// کلمه کلیدی this متد را به اکستنشن متد (Extension Method) تبدیل می کند
{
return value.ToString("#,0 Tooman");
}
public static string ToShamsi(this DateTime value)
{
PersianCalendar pc = new PersianCalendar();
return pc.GetYear(value) + "/" + pc.GetMonth(value).ToString("00") + "/" +
pc.GetDayOfMonth(value).ToString("00");
}
}
}
کلاس Program
using System;
namespace ExtensionMethod_Example
{
internal class Program
{
static void Main(string[] args)
{
int Amount = 25000;
Console.WriteLine(Amount.ToString("#,0 Rial"));
// کار برد tostring می توانید فرمت نوع نوشتاری را می دهد که #,0 سه رقم سه رقم جدا می کند و در آخر ریال را بنویسید
Console.WriteLine(MyClass.Tooman(Amount));
// برای اینکه کد تکراری ننویسیم از متد استفاده می کنیم
Console.WriteLine(MyClass.Tooman(741258));
Console.WriteLine(Amount.ToRial());
//متد toRial به عنوان یک اکستنشن متد به type int اضافه شد. ایشون یک متد سربار گزاری شده است
Console.WriteLine(222444.ToRial());
Console.WriteLine(DateTime.Now.ToShamsi());
Console.ReadKey();
}
}
}
در سیشارپ، متد ToString() برای تبدیل انواع دادهها به رشته استفاده میشود. این متد به شما امکان میدهد تا دادهها را به فرمتهای مختلف رشتهای تبدیل کنید. در اینجا چند مثال از استفادههای مختلف ToString() آورده شده است:
- تبدیل اعداد به رشته:
int number = 123;
string numberString = number.ToString();
- تبدیل تاریخ به رشته با فرمت خاص:
DateTime date = DateTime.Now;
string dateString = date.ToString("yyyy-MM-dd");
- تبدیل اعداد اعشاری به رشته با فرمت خاص:
double value = 123.456;
string valueString = value.ToString("F2"); // خروجی: "123.46"
- تبدیل بولین به رشته:
bool flag = true;
string flagString = flag.ToString(); // خروجی: "True"
این متد به شما امکان میدهد تا دادهها را به فرمتهای مختلفی تبدیل کنید که برای نمایش، ثبت لاگ، و ذخیرهسازی دادهها بسیار مفید است.
در اینجا چند نمونه دیگر از استفادههای متد ToString() در سیشارپ آورده شده است:
- تبدیل اعداد به رشته با فرمت پولی:
decimal price = 1234.56m;
string priceString = price.ToString("C"); // خروجی: "$1,234.56" (بسته به تنظیمات محلی)
- تبدیل اعداد به رشته با فرمت درصدی:
double percentage = 0.876;
string percentageString = percentage.ToString("P"); // خروجی: "87.60%"
- تبدیل اعداد به رشته با فرمت علمی:
double scientificValue = 1234.56;
string scientificString = scientificValue.ToString("E2"); // خروجی: "1.23E+03"
- تبدیل زمان به رشته با فرمت خاص:
TimeSpan time = new TimeSpan(1, 2, 3);
string timeString = time.ToString(@"hh\:mm\:ss"); // خروجی: "01:02:03"
- تبدیل اعداد به رشته با فرمت هگزادسیمال:
int hexValue = 255;
string hexString = hexValue.ToString("X"); // خروجی: "FF"
- تبدیل اعداد به رشته با فرمت سفارشی:
double customValue = 1234.5678;
string customString = customValue.ToString("0.0000"); // خروجی: "1234.5678"
این نمونهها نشان میدهند که چگونه میتوانید از متد ToString() برای تبدیل انواع دادهها به رشته با فرمتهای مختلف استفاده کنید.
برای جدا کردن اعداد به صورت سه رقم سه رقم در سیشارپ، میتوانید از متد ToString() با فرمتهای خاص استفاده کنید. در اینجا چند مثال آورده شده است:
- جدا کردن اعداد صحیح:
int number = 123456789;
string formattedNumber = number.ToString("N0"); // خروجی: "123,456,789"
- جدا کردن اعداد اعشاری:
double value = 1234567.89;
string formattedValue = value.ToString("N2"); // خروجی: "1,234,567.89"
- جدا کردن اعداد در تکستباکس:
اگر میخواهید عدد وارد شده در یک تکستباکس به صورت سه رقم سه رقم جدا شود، میتوانید از رویداد Leave استفاده کنید:
private void textBox1_Leave(object sender, EventArgs e)
{
if (int.TryParse(textBox1.Text, out int number))
{
textBox1.Text = number.ToString("N0");
}
}
این کدها به شما کمک میکنند تا اعداد را به صورت سه رقم سه رقم جدا کنید و نمایش دهید.
در سیشارپ، کلمه کلیدی virtual به شما اجازه میدهد تا یک متد یا property را به صورت مجازی تعریف کنید. این به این معناست که کلاسهای مشتقشده میتوانند این متد یا property را بازنویسی (override) کنند و رفتار خود را پیادهسازی کنند.
به عنوان مثال، فرض کنید یک کلاس پایه به نام Animal دارید که یک متد مجازی به نام MakeSound دارد:
public class Animal
{
public virtual void MakeSound()
{
Console.WriteLine("Some generic animal sound");
}
}
سپس میتوانید یک کلاس مشتقشده به نام Dog داشته باشید که این متد را بازنویسی میکند:
public class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("Bark");
}
}
در این مثال، وقتی یک شیء از نوع Dog ایجاد میکنید و متد MakeSound را فراخوانی میکنید، خروجی "Bark" خواهد بود، در حالی که اگر از کلاس پایه Animal استفاده کنید، خروجی "Some generic animal sound" خواهد بود.
در سیشارپ، کلمه کلیدی base برای دسترسی به اعضای کلاس پایه از داخل یک کلاس مشتقشده استفاده میشود. این کلمه کلیدی به شما اجازه میدهد تا متدها، propertyها و سازندههای کلاس پایه را فراخوانی کنید.
به عنوان مثال، فرض کنید یک کلاس پایه به نام Animal دارید که یک متد به نام MakeSound دارد:
public class Animal
{
public virtual void MakeSound()
{
Console.WriteLine("Some generic animal sound");
}
}
سپس یک کلاس مشتقشده به نام Dog دارید که این متد را بازنویسی میکند و همچنین از متد کلاس پایه استفاده میکند:
public class Dog : Animal
{
public override void MakeSound()
{
base.MakeSound(); // فراخوانی متد کلاس پایه
Console.WriteLine("Bark");
}
}
در این مثال، وقتی متد MakeSound از کلاس Dog فراخوانی میشود، ابتدا متد MakeSound از کلاس پایه (Animal) اجرا میشود و سپس خروجی "Some generic animal sound" چاپ میشود. بعد از آن، خروجی "Bark" چاپ میشود.
در سیشارپ، کلمه کلیدی abstract برای تعریف کلاسها و متدهای انتزاعی استفاده میشود. یک کلاس انتزاعی (abstract class) کلاسی است که نمیتوان از آن نمونهسازی کرد، بلکه باید از آن ارثبری شود. این کلاسها معمولاً شامل متدهای انتزاعی هستند که فقط امضای متد را تعریف میکنند و پیادهسازی آنها به عهده کلاسهای فرزند است.
به عنوان مثال:
public abstract class Animal
{
public abstract void MakeSound();
}
public class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("Woof!");
}
}
در این مثال، کلاس Animal یک کلاس انتزاعی است که متد MakeSound را تعریف کرده است. کلاس Dog از Animal ارثبری میکند و متد MakeSound را پیادهسازی میکند.
در سیشارپ، کلمه کلیدی sealed برای جلوگیری از ارثبری یک کلاس استفاده میشود. وقتی یک کلاس به عنوان sealed تعریف میشود، هیچ کلاسی نمیتواند از آن ارثبری کند. این ویژگی زمانی مفید است که بخواهید مطمئن شوید که کلاس شما به عنوان یک کلاس پایه استفاده نمیشود و تغییرات ناخواسته در کلاسهای فرزند رخ نمیدهد.
به عنوان مثال:
public sealed class Vehicle
{
public void StartEngine()
{
Console.WriteLine("The engine is started.");
}
}
در این مثال، کلاس Vehicle با کلمه کلیدی sealed مشخص شده است، بنابراین هیچ کلاسی نمیتواند از Vehicle ارثبری کند.
فهرست
سی شارپ پیشرفته
01- برنامه کنسول سیشارپ در دیتابیس SQL Server
02- بررسی برنامه کنسول سیشارپ در دیتابیس SQL Server
03- رشته اتصال (Connection String)
04- ذخیره، نمایش، بروزرسانی و حذف در یک دیتابیس از سیشارپ
05- دریافت نام و فامیل نمایش، بروزرسانی و حذف در یک دیتابیس از سیشارپ
06- یک متد در کلاس SqlCommand
07- ویندوز فرمها (Windows Forms)
08- تفاوت دات نت فرمورک و دانت در ویندوز فرم
09- خصوصیات (Properties) ویندوز فرم
10- جعبه ابزار (Toolbox) ویندوز فرم
11- ساخت یک ماشین حساب ساده
12- اتصال به SQL Server با استفاده از نقطه (.)
13- دو روش آدرسدهی
14- دفترچه تلفن من
15- ساخت یک پنجره لاگین
16- با استفاده از سی شارپ یک دیتابیس
17- با استفاده از سی شارپ یک جداول دیتابیس
18- لینک LINQ
19- دستورات SQL و دستورات LINQ
20- نحوه نوشتاری LINQ
21- لامبدا (Lambda Expressions)
22- نحوه نوشتاری LINQ و Lambda
23- سه روش مختلف برای افزودن اشیاء به لیست
24- یک مثال عملی
25- Entity Framework (EF)
26- نحوه استفاده از Entity Framework
27- یک مثال کامل از یک برنامه کنسول سی شارپ با استفاده از Entity Framework Core
28- یک مثال کامل دیگر از یک برنامه کنسول سی شارپ با استفاده از Entity Framework Core
29- نصب Entity Framework
30- یک مثال کامل اضافه کردن (Insert) و انتخاب (Select) و بروز رسانی (Update) و حذف (Delete) و ذخیره (Save)
31- من دفترچه تلفن را به Entity تغییر دادم و توضیح دادن کد
32- الگوهای طراحی یا Design Patterns
33- تست واحد یا Unit Testing
34- ویژگیهای پیشرفته سیشارپ
35- آموزش ساخت حسابداری شخصی در کانال سی شارپ
36- اکستنشن متد (Extension Method)
37- یک مثال دیگر از اکستنشن متد
38- متد ToString()
39- کلمه کلیدی virtual
40- کلمه کلیدی abstract
41- کلمه کلیدی sealed