Skip to content

Commit 3f27881

Browse files
committed
Added a basic practice
1 parent f8181d9 commit 3f27881

File tree

4 files changed

+95
-4
lines changed

4 files changed

+95
-4
lines changed

Learning.Delegates/BasicSample.cs

+17-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,21 @@
11
namespace Learning.Delegates;
22

3-
internal class BasicSample
3+
delegate int MathOperation(int a, int b);
4+
5+
class BasicSample
46
{
7+
public static void Run()
8+
{
9+
MathOperation addition = (a, b) => a + b;
10+
// static int addition(int a, int b) => a + b; // Local Function kullanımı
11+
MathOperation subtraction = (a, b) => a - b;
12+
13+
int x = 5;
14+
int y = 9;
15+
16+
MathOperation operation = addition;
17+
Console.WriteLine($"Result: {operation(x, y)}");
18+
MathOperation operation1 = subtraction;
19+
Console.WriteLine($"Result: {operation(x, y)}");
20+
}
521
}

Learning.Delegates/EventSample.cs

+29-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,33 @@
11
namespace Learning.Delegates;
22

3-
internal class EventSample
3+
delegate void OrderProcessedHandler(string orderId);
4+
5+
class OrderProcessor
46
{
7+
public event OrderProcessedHandler OrderProcessed;
8+
9+
public void ProcessOrder(string orderId)
10+
{
11+
Console.WriteLine($"Order {orderId} is being processed...");
12+
System.Threading.Thread.Sleep(1000);
13+
Console.WriteLine($"Order {orderId} processed!");
14+
15+
OrderProcessed?.Invoke(orderId);
16+
}
17+
}
18+
19+
class EventSample
20+
{
21+
public static void Run()
22+
{
23+
var processor = new OrderProcessor();
24+
25+
processor.OrderProcessed += orderId => Console.WriteLine($"Email sent for order {orderId}");
26+
processor.OrderProcessed += orderId => Console.WriteLine($"Data Warehouse notified for order {orderId}");
27+
28+
Console.WriteLine("Enter order ID:");
29+
string orderId = Console.ReadLine();
30+
31+
processor.ProcessOrder(orderId);
32+
}
533
}

Learning.Delegates/MulticastSample.cs

+46-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,50 @@
11
namespace Learning.Delegates;
22

3-
internal class MulticastSample
3+
/*
4+
Multicast Delegate; Bir delegate ile birden fazla metodu zincir olarak bağlayıp kullanmamız mümkündür.
5+
Tek bir delegate çağrısı kendisine += operatörü ile eklenmiş tüm metotların çağırılması anlamına gelir
6+
7+
Event; Delegate tipleri ile event'lerin tetiklenmesi de mümkündür.
8+
*/
9+
10+
delegate void LogHandler(string message);
11+
12+
static class MulticastSample
413
{
14+
public static void Run()
15+
{
16+
#region Multicast Delegate Kullanımı
17+
18+
// Aşağıdaki satırda handlers isimli değişkene LogToConsole metodunu atadık
19+
LogHandler handlers = LogToConsole;
20+
handlers += LogToTextFile; // handlers değişkenine ikinci bir metot daha ekledik
21+
handlers += LogToDatabase;
22+
Log(handlers, "API gateway online");
23+
24+
//handlers("Connection succedded..."); // Hem Console, hem text hem de db loglama fonksiyonları arka arkaya çağrılır
25+
26+
// handlers -= LogToTextFile;
27+
28+
//handlers("Loading games...");
29+
30+
#endregion
31+
}
32+
static void Log(LogHandler handler, string message)
33+
{
34+
handler(message);
35+
}
36+
37+
static void LogToConsole(string message)
38+
{
39+
Console.WriteLine($"{DateTime.Now}: {message}");
40+
}
41+
static void LogToTextFile(string message)
42+
{
43+
var logText = $"\n{DateTime.Now}: {message}";
44+
File.AppendAllText(Path.Combine(Environment.CurrentDirectory, "logs.txt"), logText);
45+
}
46+
static void LogToDatabase(string message)
47+
{
48+
Console.WriteLine("Writing to db");
49+
}
550
}

Learning.Delegates/Program.cs

+3-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ internal class Program
1212
{
1313
static void Main(string[] args)
1414
{
15-
15+
BasicSample.Run();
16+
MulticastSample.Run();
17+
EventSample.Run();
1618
}
1719
}

0 commit comments

Comments
 (0)