شروع آموزش برنامه نویسی
برنامه نویسی چیست
برنامهنویسی سیشارپ (C#) یک زبان برنامهنویسی مدرن، شیءگرا و چندمنظوره است که توسط مایکروسافت توسعه داده شده است. این زبان برای ساخت نرمافزارهای مختلف از جمله برنامههای تحت ویندوز، وب و موبایل استفاده میشود.
معرفی سیشارپ
-
تاریخچه و توسعه: آغاز زبان سیشارپ در سال ۲۰۰۰ میلادی توسط مایکروسافت و معرفی آن در قالب پلتفرم .NET.
-
ویژگیها:
-
زبان شیءگرا و تایپ ایمن
-
پشتیبانی از برنامهنویسی موازی
-
مدیریت حافظه خودکار (garbage collection)
-
سازگاری با ویندوز و پلتفرمهای دیگر از طریق .NET Core
اصول و قواعد زبان
-
public class Person { public string Name { get; set; } public int Age { get; set; } public void Introduce() { Console.WriteLine($"Hello, my name is {Name} and I am {Age} years old."); } }
-
انواع دادهای و متغیرها: آشنایی با انواع دادهای مانند int، string، float و غیره.
-
ساختارهای کنترلی: شامل if-else، switch، حلقهها (for، while و do-while).
کتابخانهها و فریمورکهای مهم
-
.NET Framework و .NET Core: پلتفرمهای اصلی برای توسعه برنامههای سیشارپ.
-
ASP.NET: فریمورک برای توسعه برنامههای وب.
-
Xamarin: برای توسعه برنامههای موبایل.
نمونههایی از کاربردهای واقعی
-
توسعه برنامههای کاربردی ویندوز
-
توسعه بازیها با استفاده از Unity
-
توسعه برنامههای وب با استفاده از ASP.NET
منابع یادگیری بیشتر
-
کتابها:
-
"C# 9.0 in a Nutshell" by Joseph Albahari
-
"Pro C# 9.0 with .NET 5" by Andrew Troelsen
-
وبسایتها و دورههای آنلاین:
-
Microsoft Learn
-
Pluralsight
-
Udemy
این خلاصه میتواند نقطه شروع خوبی برای مقاله شما باشد. با گسترش هر یک از این بخشها و افزودن جزئیات بیشتر، میتوانید مقالهای جامع و آموزنده درباره سیشارپ بنویسید.
سیشارپ (C#) یک زبان برنامهنویسی مدرن، شیءگرا و تایپ ایمن است که توسط مایکروسافت توسعه داده شده است. ساختار زبان سیشارپ به گونهای طراحی شده که برنامهنویسان میتوانند به راحتی مفاهیم پیچیده را مدیریت کنند و کدهای قابل خواندن و نگهداری بنویسند.
ساختار زبان برنامهنویسی سیشارپ
تعریف و نحو کلی
سیشارپ یک زبان استاتیک تایپ است، به این معنی که نوع دادهها در زمان کامپایل بررسی میشوند. هر برنامه سیشارپ شامل کلاسها، اعضای کلاس و متدها است. ساختار اصلی هر برنامه سیشارپ به صورت زیر است:
using System;
namespace HelloWorld {
class Program {
static void Main(string[] args) {
Console.WriteLine("Hello, World!");
}
}
}
در این برنامه، فضاهای نام (namespaces) برای سازماندهی کلاسها و متدها استفاده میشوند. namespace
بلوکهای کد را منطقی و سازمانیافته نگه میدارد.
کلاسها و اشیاء (Objects)
کلاسها بلوکهای اساسی ساختاری سیشارپ هستند و اشیاء نمونههایی از این کلاسها. کلاسها میتوانند شامل فیلدها، خواص (properties)، متدها و رویدادها (events) باشند.
public class Person {
private string name;
public int Age { get; set; }
public Person(string name, int age) {
this.name = name;
Age = age;
}
public void Speak() {
Console.WriteLine($"Hello, my name is {name} and I am {Age} years old.");
}
}
اینترفیسها (Interfaces)
اینترفیسها قراردادهایی برای کلاسها فراهم میکنند. آنها فقط اعلان متدها و خواص را مشخص میکنند و هیچ پیادهسازیای ندارند.
public interface IGreetable {
void Greet();
}
public class FriendlyPerson : IGreetable {
public void Greet() {
Console.WriteLine("Hi there! Nice to meet you!");
}
}
ارثبری (Inheritance)
سیشارپ از ارثبری (inheritance) برای ایجاد کلاسهای جدید از کلاسهای موجود استفاده میکند. این ویژگی باعث میشود کدهای مشترک به راحتی بین کلاسها به اشتراک گذاشته شوند.
public class Animal {
public void Eat() {
Console.WriteLine("Eating...");
}
}
public class Dog : Animal {
public void Bark() {
Console.WriteLine("Barking...");
}
}
پلیمورفیسم (Polymorphism)
پلیمورفیسم اجازه میدهد متدهای مختلف با یک نام مشابه در کلاسهای مختلف پیادهسازی شوند. این ویژگی از طریق متدهای مجازی (virtual methods) و اینترفیسها امکانپذیر است.
public class Animal {
public virtual void Speak() {
Console.WriteLine("Animal sound");
}
}
public class Dog : Animal {
public override void Speak() {
Console.WriteLine("Woof!");
}
}
مدیریت حافظه و منابع
سیشارپ از مدیریت حافظه خودکار از طریق جمعآوری زباله (garbage collection) پشتیبانی میکند. این ویژگی باعث کاهش پیچیدگی مدیریت حافظه برای برنامهنویسان میشود. همچنین، از کلاسهایی مانند IDisposable
برای مدیریت منابع استفاده میشود.
public class ResourceHolder : IDisposable {
public void Dispose() {
}
}
نتیجهگیری
زبان سیشارپ با ساختاری منظم و تواناییهای متعدد خود، ابزاری قدرتمند برای توسعهدهندگان در ایجاد برنامههای مختلف است. این زبان با ترکیب اصول برنامهنویسی شیءگرا، مدیریت حافظه خودکار و پشتیبانی از ارثبری و پلیمورفیسم، یکی از زبانهای پرکاربرد در دنیای توسعه نرمافزار است.
برای توسعه پروژههای C#، ابزارها و محیطهای توسعه مختلفی وجود دارد که هرکدام ویژگیها و امکانات خاص خود را دارند. این ابزارها کمک میکنند تا فرآیند توسعه سریعتر، کارآمدتر و سادهتر انجام شود.
ابزارها و محیطهای توسعه برای C#
Visual Studio
Visual Studio محیط توسعه یکپارچه (IDE) بسیار قدرتمندی است که توسط مایکروسافت توسعه یافته و کاملترین ابزار برای توسعه پروژههای C# به شمار میرود. ویژگیهای اصلی آن عبارتند از:
-
پشتیبانی کامل از زبانهای مختلف برنامهنویسی مانند C#، VB.NET و F#
-
اشکالزدایی (Debugging) قوی و پیشرفته
-
ابزارهای طراحی ویژوال برای توسعه برنامههای ویندوز، وب و موبایل
-
امکانات مدیریت نسخهها و همکاری تیمی
Visual Studio Code
Visual Studio Code یک ویرایشگر کد منبع قدرتمند و سبک است که توسط مایکروسافت توسعه داده شده است. امکانات آن شامل:
-
افزونههای متعدد برای پشتیبانی از زبانهای مختلف، از جمله C#
-
قابلیتهای اشکالزدایی
-
یکپارچگی با سیستمهای کنترل نسخه مانند Git
-
محیط کاربر پسند و قابل تنظیم
Rider
Rider یک IDE دیگر برای توسعه پروژههای C# است که توسط JetBrains ارائه میشود. ویژگیهای بارز Rider عبارتند از:
-
اشکالزدایی پیشرفته
-
تحلیل کد و ابزارهای بازسازی (refactoring) قدرتمند
-
یکپارچگی با سیستمهای کنترل نسخه
Xamarin
Xamarin یک ابزار توسعه برای ایجاد برنامههای موبایل است که از زبان C# استفاده میکند. با Xamarin، میتوانید برنامههای بومی برای iOS و Android با استفاده از یک کد پایه مشترک بنویسید.
.NET CLI
.NET CLI (Command Line Interface) ابزاری است که به توسعهدهندگان اجازه میدهد تا برنامههای .NET و C# را از طریق خط فرمان ایجاد، اجرا و مدیریت کنند. این ابزار برای اتوماسیون و اسکریپتنویسی بسیار مناسب است.
Unity
Unity یک موتور بازیسازی است که از C# برای توسعه بازیهای دو بعدی و سه بعدی استفاده میکند. Unity یکی از محبوبترین ابزارها برای توسعهدهندگان بازی است.
این ابزارها میتوانند به شما در توسعه پروژههای C# کمک کنند و هرکدام با ویژگیها و امکانات خاص خود، فرآیند توسعه را سادهتر و کارآمدتر میکنند. کدام یکی از اینها به نظرتان جذابتر است یا تجربهای با آنها داشتهاید؟
سیشارپ یکی از بهترین زبانهای برنامهنویسی برای یادگیری است. برای شروع، میتوانید مراحل زیر را دنبال کنید:
۱. منابع آموزشی
-
دورههای آنلاین: سایتهایی مثل Udemy، Coursera، و Pluralsight دورههای مبتدی تا پیشرفته را ارائه میدهند.
-
کتابها: کتابهایی مثل "C# in Depth" نوشته Jon Skeet و "Head First C#" نوشته Andrew Stellman و Jennifer Greene.
۲. نصب محیط توسعه
-
Visual Studio: محیط توسعه کامل برای کدنویسی C#.
-
Visual Studio Code: ویرایشگر سبک و قابل تنظیم با افزونههای C#.
۳. یادگیری اصول اولیه
-
انواع دادهای و متغیرها: آشنایی با int، string، bool و غیره.
-
ساختارهای کنترلی: شرطها (if-else)، حلقهها (for، while).
-
کلاسها و اشیاء: تعریف و استفاده از کلاسها.
۴. تمرینهای عملی
-
حل تمرینات کدنویسی در سایتهایی مثل LeetCode و HackerRank.
-
پروژههای کوچک مانند ساخت یک برنامه ماشین حساب یا مدیریت کتابخانه.
۵. منابع پیشرفته
-
مطالعه عمیقتر در زمینههای OOP، برنامهنویسی موازی، و طراحی الگوها (design patterns).
-
انجام پروژههای واقعی و استفاده از فریمورکهایی مثل ASP.NET برای توسعه وب.
۶. مشارکت در انجمنها
-
پیوستن به انجمنهای برنامهنویسی و شرکت در تالارهای گفتوگو مثل Stack Overflow و Reddit.
با پیگیری این مراحل، میتوانید به یک برنامهنویس ماهر در سیشارپ تبدیل شوید. به نظرتان از کدام مرحله شروع کنیم؟
در اینجا ۱۰ دستور اولیه برای شروع آورده شده است:
۱. دستور if
(شرطی)
int number = 10;
if (number > 5) {
Console.WriteLine("Number is greater than 5");
}
خروجی:
۲. دستور else
int number = 3;
if (number > 5) {
Console.WriteLine("Number is greater than 5");
} else {
Console.WriteLine("Number is 5 or less");
}
خروجی:
۳. دستور else if
int number = 5;
if (number > 5) {
Console.WriteLine("Number is greater than 5");
} else if (number == 5) {
Console.WriteLine("Number is equal to 5");
} else {
Console.WriteLine("Number is less than 5");
}
خروجی:
۴. حلقه for
for (int i = 0; i < 5; i++) {
Console.WriteLine("Iteration: " + i);
}
خروجی:
Iteration: 0
Iteration: 1
Iteration: 2
Iteration: 3
Iteration: 4
۵. حلقه while
int i = 0;
while (i < 5) {
Console.WriteLine("Iteration: " + i);
i++;
}
خروجی:
Iteration: 0
Iteration: 1
Iteration: 2
Iteration: 3
Iteration: 4
۶. حلقه do-while
int i = 0;
do {
Console.WriteLine("Iteration: " + i);
i++;
} while (i < 5);
خروجی:
Iteration: 0
Iteration: 1
Iteration: 2
Iteration: 3
Iteration: 4
۷. دستور switch
int day = 3;
switch (day) {
case 1:
Console.WriteLine("Monday");
break;
case 2:
Console.WriteLine("Tuesday");
break;
case 3:
Console.WriteLine("Wednesday");
break;
default:
Console.WriteLine("Other day");
break;
}
خروجی:
۸. متدها (توابع)
public void Greet(string name) {
Console.WriteLine("Hello, " + name);
}
Greet("Alice");
خروجی:
۹. آرایهها
int[] numbers = {1, 2, 3, 4, 5};
foreach (int number in numbers) {
Console.WriteLine("Number: " + number);
}
خروجی:
Number: 1
Number: 2
Number: 3
Number: 4
Number: 5
۱۰. لیستها
List<string> names = new List<string> {"Alice", "Bob", "Charlie"};
names.Add("Dave");
foreach (string name in names) {
Console.WriteLine("Name: " + name);
}
خروجی:
Name: Alice
Name: Bob
Name: Charlie
Name: Dave
این ده مورد میتواند نقطه شروع خوبی باشد.
۱۱. دستورات break
for (int i = 0; i < 10; i++) {
if (i == 5) {
break;
}
Console.WriteLine("Iteration: " + i);
}
خروجی:
Iteration: 0
Iteration: 1
Iteration: 2
Iteration: 3
Iteration: 4
۱۲. دستور continue
for (int i = 0; i < 5; i++) {
if (i == 2) {
continue;
}
Console.WriteLine("Iteration: " + i);
}
خروجی:
Iteration: 0
Iteration: 1
Iteration: 3
Iteration: 4
۱۳. تعریف متغیرها
int age = 25;
string name = "Alice";
bool isStudent = true;
Console.WriteLine($"Name: {name}, Age: {age}, Student: {isStudent}");
خروجی:
Name: Alice, Age: 25, Student: True
۱۴. عملگرهای ریاضی
int a = 10;
int b = 3;
int sum = a + b;
int difference = a - b;
int product = a * b;
int quotient = a / b;
int remainder = a % b;
Console.WriteLine($"Sum: {sum}, Difference: {difference}, Product: {product}, Quotient: {quotient}, Remainder: {remainder}");
خروجی:
Sum: 13, Difference: 7, Product: 30, Quotient: 3, Remainder: 1
۱۵. تبدیل نوع (Type Casting)
double x = 9.78;
int y = (int)x;
Console.WriteLine($"Double: {x}, Integer: {y}");
خروجی:
۱۶. رشتهها (Strings)
string greeting = "Hello";
string name = "World";
string message = greeting + ", " + name + "!";
Console.WriteLine(message);
خروجی:
۱۷. رشتههای چند خطی
string multiLineString = @"This is a
multi-line
string.";
Console.WriteLine(multiLineString);
خروجی:
This is a
multi-line
string.
۱۸. رشتههای فرموله شده
string name = "Alice";
int age = 25;
string message = $"Name: {name}, Age: {age}";
Console.WriteLine(message);
خروجی:
۱۹. متدهای رشتهای
string phrase = "Hello World!";
string lowerCasePhrase = phrase.ToLower();
string upperCasePhrase = phrase.ToUpper();
bool containsWorld = phrase.Contains("World");
Console.WriteLine($"LowerCase: {lowerCasePhrase}, UpperCase: {upperCasePhrase}, Contains 'World': {containsWorld}");
خروجی:
LowerCase: hello world!, UpperCase: HELLO WORLD!, Contains 'World': True
۲۰. تعریف و استفاده از آرایهها
int[] numbers = new int[5];
numbers[0] = 1;
numbers[1] = 2;
numbers[2] = 3;
numbers[3] = 4;
numbers[4] = 5;
foreach (int number in numbers) {
Console.WriteLine(number);
}
خروجی:
۲۱. متدهای آرایهای
int[] numbers = {1, 2, 3, 4, 5};
Array.Reverse(numbers);
foreach (int number in numbers) {
Console.WriteLine(number);
}
خروجی:
۲۲. کار با تاریخ و زمان
DateTime now = DateTime.Now;
DateTime specificDate = new DateTime(2023, 10, 23);
Console.WriteLine($"Now: {now}, Specific Date: {specificDate}");
خروجی:
Now: [Current DateTime], Specific Date: 2023-10-23 00:00:00
۲۳. قالببندی تاریخ و زمان
DateTime now = DateTime.Now;
string formattedDate = now.ToString("yyyy-MM-dd HH:mm:ss");
Console.WriteLine(formattedDate);
خروجی:
[Current Date in yyyy-MM-dd HH:mm:ss format]
۲۴. کار با لیستها
List<int> numbers = new List<int> {1, 2, 3, 4, 5};
numbers.Add(6);
numbers.Remove(3);
foreach (int number in numbers) {
Console.WriteLine(number);
}
خروجی:
۲۵. استفاده از واژهنامهها (Dictionaries)
Dictionary<string, int> ages = new Dictionary<string, int> {
{"Alice", 25},
{"Bob", 30}
};
ages["Charlie"] = 35;
foreach (var entry in ages) {
Console.WriteLine($"{entry.Key}: {entry.Value}");
}
خروجی:
Alice: 25
Bob: 30
Charlie: 35
۲۶. متدهای بازگشتی (Recursion)
int Factorial(int n) {
if (n <= 1) {
return 1;
}
return n * Factorial(n - 1);
}
Console.WriteLine($"Factorial of 5: {Factorial(5)}");
خروجی:
۲۷. دستورات استفاده (using statements)
using (StreamWriter writer = new StreamWriter("test.txt")) {
writer.WriteLine("Hello, World!");
}
خروجی: فایل test.txt
با محتوای "Hello, World!"
۲۸. مدیریت استثناها (Exception Handling)
try {
int result = 10 / 0;
} catch (DivideByZeroException ex) {
Console.WriteLine("Cannot divide by zero.");
}
خروجی:
۲۹. کلاسهای جزئی (Partial Classes)
public partial class MyClass {
public void Method1() {
Console.WriteLine("Method1");
}
}
public partial class MyClass {
public void Method2() {
Console.WriteLine("Method2");
}
}
MyClass obj = new MyClass();
obj.Method1();
obj.Method2();
خروجی:
۳۰. برنامهنویسی ناهمزمان (Asynchronous Programming)
public async Task DoWorkAsync() {
await Task.Delay(1000);
Console.WriteLine("Work completed.");
}
await DoWorkAsync();
خروجی:
دستورات سیستمی C#
دستورات سیستمی در سیشارپ به شما اجازه میدهند تا با سیستمعامل و دیگر منابع پایینسطح تعامل داشته باشید. این دستورات شامل تعامل با فایلها و پوشهها، دسترسی به اطلاعات سیستم، مدیریت فرآیندها، و استفاده از APIهای ویندوز میشوند. در اینجا چند مثال از دستورات سیستمی آورده شده است:
۱. خواندن و نوشتن فایلها
using System.IO;
// نوشتن در فایل
File.WriteAllText("example.txt", "Hello, World!");
// خواندن از فایل
string content = File.ReadAllText("example.txt");
Console.WriteLine(content);
خروجی:
۲. مدیریت پوشهها
using System.IO;
// ایجاد پوشه جدید
Directory.CreateDirectory("NewFolder");
// حذف پوشه
Directory.Delete("NewFolder");
۳. دریافت اطلاعات سیستم
using System;
string machineName = Environment.MachineName;
string osVersion = Environment.OSVersion.ToString();
int processorCount = Environment.ProcessorCount;
Console.WriteLine($"Machine Name: {machineName}, OS Version: {osVersion}, Processor Count: {processorCount}");
خروجی:
Machine Name: [Your Machine Name], OS Version: [Your OS Version], Processor Count: [Processor Count]
۴. مدیریت فرآیندها
using System.Diagnostics;
// راهاندازی یک فرآیند جدید
Process.Start("notepad.exe");
// بستن فرآیند با نام
foreach (var process in Process.GetProcessesByName("notepad")) {
process.Kill();
}
۵. استفاده از APIهای ویندوز
using System;
using System.Runtime.InteropServices;
class Program {
[DllImport("user32.dll")]
public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);
static void Main() {
MessageBox(IntPtr.Zero, "Hello, World!", "Hello", 0);
}
}
خروجی:
-
یک پنجره پیغام با محتوای "Hello, World!" باز میشود.
۶. خواندن و نوشتن در رجیستری
using Microsoft.Win32;
// نوشتن در رجیستری
RegistryKey key = Registry.CurrentUser.CreateSubKey(@"Software\MyApp");
key.SetValue("Username", "Alice");
key.Close();
// خواندن از رجیستری
key = Registry.CurrentUser.OpenSubKey(@"Software\MyApp");
string username = (string)key.GetValue("Username");
key.Close();
Console.WriteLine($"Username: {username}");
خروجی:
۷. استفاده از متغیرهای محیطی
using System;
string path = Environment.GetEnvironmentVariable("PATH");
Console.WriteLine(path);
۸. نظارت بر تغییرات فایلها
using System;
using System.IO;
class Program {
static void Main() {
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = @"C:\Your\Path\Here";
watcher.NotifyFilter = NotifyFilters.LastWrite;
watcher.Filter = "*.txt";
watcher.Changed += OnChanged;
watcher.EnableRaisingEvents = true;
Console.WriteLine("Press enter to exit.");
Console.ReadLine();
}
private static void OnChanged(object source, FileSystemEventArgs e) {
Console.WriteLine($"File: {e.FullPath} has been modified.");
}
}
خروجی:
-
هرگاه فایل متنی در مسیر مشخصشده تغییر کند، پیغامی در کنسول نمایش داده میشود.
۹. ارسال درخواستهای HTTP
using System;
using System.Net.Http;
using System.Threading.Tasks;
class Program {
static async Task Main() {
using (HttpClient client = new HttpClient()) {
string response = await client.GetStringAsync("https://api.github.com");
Console.WriteLine(response);
}
}
}
۱۰. مدیریت حافظه
using System;
using System.Runtime.InteropServices;
class Program {
[DllImport("kernel32.dll")]
public static extern void GetSystemTime(ref SYSTEMTIME lpSystemTime);
public struct SYSTEMTIME {
public ushort wYear;
public ushort wMonth;
public ushort wDayOfWeek;
public ushort wDay;
public ushort wHour;
public ushort wMinute;
public ushort wSecond;
public ushort wMilliseconds;
}
static void Main() {
SYSTEMTIME stime = new SYSTEMTIME();
GetSystemTime(ref stime);
Console.WriteLine($"System time: {stime.wHour}:{stime.wMinute}:{stime.wSecond}");
}
}
خروجی:
System time: [Current Time]
این دستورات به شما کمک میکنند تا بتوانید با سیستمعامل و منابع آن به طور مستقیم تعامل کنید و عملیاتهای سطح پایین را انجام دهید. برای استفاده از اسمبلیها در سیشارپ، میتوانید از دستورات سطح پایین و کتابخانههای مربوطه استفاده کنید. اسمبلیها معمولاً بهصورت مستقیم با سختافزار در تعامل هستند و شامل کدهای سطح پایینتری مانند کدهای اسمبلی و توابع API ویندوز میشوند. در سیشارپ، این کار از طریق پشتیبانی از Interoperability و PInvoke (Platform Invocation) انجام میشود.
مثال کاربرد PInvoke
در این مثال، از تابع MessageBox
در user32.dll
ویندوز استفاده میکنیم:
using System;
using System.Runtime.InteropServices;
class Program {
[DllImport("user32.dll")]
public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);
static void Main() {
MessageBox(IntPtr.Zero, "Hello, World!", "Hello", 0);
}
}
توضیحات:
-
DllImport
یک ویژگی است که به شما اجازه میدهد تا تابعی از یک DLL (Dynamic Link Library) خارجی را وارد کنید.
-
MessageBox
تابعی است که از user32.dll
ویندوز وارد شده و برای نمایش یک پیام استفاده میشود.
دستورات سطح پایین اسمبلی
برای استفاده از کدهای سطح پایین اسمبلی، میتوانید از دستور unsafe
و fixed
در سیشارپ استفاده کنید:
using System;
class Program {
unsafe static void Main() {
int value = 10;
int* pValue = &value;
Console.WriteLine("Value: " + value);
Console.WriteLine("Address: " + (int)pValue);
}
}
توضیحات:
-
unsafe
اجازه میدهد که کدهای غیرایمن (که مستقیماً با حافظه کار میکنند) نوشته شوند.
-
int* pValue
یک اشارهگر به متغیر value
است که آدرس حافظهی آن را ذخیره میکند.
استفاده از دستورات و روشهای فوق به شما امکان میدهد تا به کارهای سطح پایینتر و بهینهتر در سیشارپ بپردازید.
گرافیک کامپیوتری در سیشارپ یکی از حوزههای مهم و جذاب است که میتوانید از آن برای ساخت بازیها، برنامههای کاربردی گرافیکی و حتی کاربردهای علمی استفاده کنید. در اینجا ده مثال کاربردی از گرافیک کامپیوتری در سیشارپ با استفاده از کتابخانههای مختلف آورده شده است.
مثال ۱: رسم یک دایره ساده با استفاده از GDI+
using System;
using System.Drawing;
using System.Windows.Forms;
public class CircleForm : Form {
protected override void OnPaint(PaintEventArgs e) {
base.OnPaint(e);
Graphics g = e.Graphics;
g.FillEllipse(Brushes.Blue, 50, 50, 100, 100);
}
static void Main() {
Application.Run(new CircleForm());
}
}
توضیحات: این مثال یک دایره آبی رنگ را در پنجرهای رسم میکند.
مثال ۲: رسم یک مستطیل با استفاده از GDI+
using System;
using System.Drawing;
using System.Windows.Forms;
public class RectangleForm : Form {
protected override void OnPaint(PaintEventArgs e) {
base.OnPaint(e);
Graphics g = e.Graphics;
g.FillRectangle(Brushes.Green, 50, 50, 200, 100);
}
static void Main() {
Application.Run(new RectangleForm());
}
}
توضیحات: این مثال یک مستطیل سبز رنگ را در پنجرهای رسم میکند.
مثال ۳: رسم خطوط با استفاده از GDI+
using System;
using System.Drawing;
using System.Windows.Forms;
public class LineForm : Form {
protected override void OnPaint(PaintEventArgs e) {
base.OnPaint(e);
Graphics g = e.Graphics;
g.DrawLine(Pens.Red, 10, 10, 200, 200);
}
static void Main() {
Application.Run(new LineForm());
}
}
توضیحات: این مثال یک خط قرمز رنگ را از نقطهای به نقطهی دیگر رسم میکند.
مثال ۴: استفاده از قلمهای سفارشی
using System;
using System.Drawing;
using System.Windows.Forms;
public class CustomPenForm : Form {
protected override void OnPaint(PaintEventArgs e) {
base.OnPaint(e);
Graphics g = e.Graphics;
Pen pen = new Pen(Color.Blue, 5);
g.DrawEllipse(pen, 50, 50, 100, 100);
}
static void Main() {
Application.Run(new CustomPenForm());
}
}
توضیحات: این مثال از یک قلم سفارشی آبی رنگ با ضخامت ۵ پیکسل برای رسم یک دایره استفاده میکند.
مثال ۵: رسم چندضلعی
using System;
using System.Drawing;
using System.Windows.Forms;
public class PolygonForm : Form {
protected override void OnPaint(PaintEventArgs e) {
base.OnPaint(e);
Graphics g = e.Graphics;
Point[] points = { new Point(50, 50), new Point(100, 25), new Point(150, 50), new Point(100, 100) };
g.FillPolygon(Brushes.Yellow, points);
}
static void Main() {
Application.Run(new PolygonForm());
}
}
توضیحات: این مثال یک چندضلعی زرد رنگ را در پنجرهای رسم میکند.
مثال ۶: رسم متن
using System;
using System.Drawing;
using System.Windows.Forms;
public class TextForm : Form {
protected override void OnPaint(PaintEventArgs e) {
base.OnPaint(e);
Graphics g = e.Graphics;
Font font = new Font("Arial", 24);
g.DrawString("Hello, World!", font, Brushes.Black, 50, 50);
}
static void Main() {
Application.Run(new TextForm());
}
}
توضیحات: این مثال متن "Hello, World!" را با استفاده از فونت Arial و اندازه ۲۴ پیکسل رسم میکند.
مثال ۷: استفاده از تصاویر
using System;
using System.Drawing;
using System.Windows.Forms;
public class ImageForm : Form {
private Image image;
public ImageForm() {
image = Image.FromFile("path_to_your_image.jpg");
}
protected override void OnPaint(PaintEventArgs e) {
base.OnPaint(e);
Graphics g = e.Graphics;
g.DrawImage(image, 50, 50);
}
static void Main() {
Application.Run(new ImageForm());
}
}
توضیحات: این مثال یک تصویر را از فایل خوانده و در پنجره نمایش میدهد.
مثال ۸: استفاده از DirectX
using System;
using SharpDX;
using SharpDX.Direct3D11;
using SharpDX.DXGI;
using SharpDX.Windows;
using Device = SharpDX.Direct3D11.Device;
public class DirectXForm : RenderForm {
private Device device;
private SwapChain swapChain;
public DirectXForm() : base("DirectX Example") {
InitializeDirectX();
}
private void InitializeDirectX() {
var swapChainDesc = new SwapChainDescription {
BufferCount = 1,
ModeDescription = new ModeDescription(800, 600, new Rational(60, 1), Format.R8G8B8A8_UNorm),
Usage = Usage.RenderTargetOutput,
OutputHandle = this.Handle,
SampleDescription = new SampleDescription(1, 0),
IsWindowed = true
};
Device.CreateWithSwapChain(SharpDX.Direct3D.DriverType.Hardware, DeviceCreationFlags.None, swapChainDesc, out device, out swapChain);
}
protected override void Dispose(bool disposing) {
swapChain.Dispose();
device.Dispose();
base.Dispose(disposing);
}
static void Main() {
using (var form = new DirectXForm()) {
RenderLoop.Run(form, () => { });
}
}
}
توضیحات: این مثال یک پنجره DirectX ساده ایجاد میکند. برای اجرا به کتابخانههای SharpDX نیاز دارید.
مثال ۹: استفاده از OpenGL با OpenTK
using System;
using OpenTK;
using OpenTK.Graphics;
using OpenTK.Graphics.OpenGL;
class Program : GameWindow {
protected override void OnLoad(EventArgs e) {
base.OnLoad(e);
GL.ClearColor(Color4.CornflowerBlue);
}
protected override void OnRenderFrame(FrameEventArgs e) {
base.OnRenderFrame(e);
GL.Clear(ClearBufferMask.ColorBufferBit);
SwapBuffers();
}
static void Main() {
using (var program = new Program()) {
program.Run(60);
}
}
}
توضیحات: این مثال یک پنجره OpenGL ساده ایجاد میکند که رنگ پسزمینهی آن CornflowerBlue است. برای اجرا به کتابخانههای OpenTK نیاز دارید.
مثال ۱۰: انیمیشن ساده با GDI+
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Threading;
public class AnimationForm : Form {
private int x = 0;
private Timer timer;
public AnimationForm() {
this.DoubleBuffered = true;
timer = new Timer();
timer.Interval = 16;
timer.Tick += UpdateFrame;
timer.Start();
}
private void UpdateFrame(object sender, EventArgs e) {
x += 5;
if (x > this.ClientSize.Width) {
x = 0;
}
this.Invalidate();
}
protected override void OnPaint(PaintEventArgs e) {
base.OnPaint(e);
Graphics g = e.Graphics;
g.FillEllipse(Brushes.Red, x, 50, 50, 50);
}
static void Main() {
Application.Run(new AnimationForm());
}
}
توضیحات: این مثال یک انیمیشن ساده از یک دایره قرمز رنگ را ایجاد میکند که به صورت افقی در پنجره حرکت میکند.
این ده مثال، تنوعی از گرافیک کامپیوتری در سیشارپ را پوشش میدهد، از استفادههای پایهای GDI+ گرفته تا کاربردهای پیچیدهتر OpenGL و DirectX. با این نمونهها میتوانید به آسانی مفاهیم مختلف گرافیک کامپیوتری را در سیشارپ یاد بگیرید و به کار ببرید.