diff --git a/Ex1.HelloWorld/Ex1.HelloWorld.csproj b/Ex1.HelloWorld/Ex1.HelloWorld.csproj
new file mode 100644
index 0000000..2150e37
--- /dev/null
+++ b/Ex1.HelloWorld/Ex1.HelloWorld.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
diff --git a/Ex1.HelloWorld/Program.cs b/Ex1.HelloWorld/Program.cs
new file mode 100644
index 0000000..581bddb
--- /dev/null
+++ b/Ex1.HelloWorld/Program.cs
@@ -0,0 +1,7 @@
+internal class Program
+{
+ private static void Main(string[] args)
+ {
+ Console.WriteLine("Hello, World!");
+ }
+}
\ No newline at end of file
diff --git a/Ex2.Comment/Ex2.Comment.csproj b/Ex2.Comment/Ex2.Comment.csproj
new file mode 100644
index 0000000..2150e37
--- /dev/null
+++ b/Ex2.Comment/Ex2.Comment.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
diff --git a/Ex2.Comment/Program.cs b/Ex2.Comment/Program.cs
new file mode 100644
index 0000000..68a5043
--- /dev/null
+++ b/Ex2.Comment/Program.cs
@@ -0,0 +1,17 @@
+internal class Program
+{
+ private static void Main(string[] args)
+ {
+ // 코멘트: 한 라인 코멘트는 두개의 슬래시 사용함
+ int a = 1;
+
+
+ int b = 1; // 코멘트: 하나의 문장 뒤에 코멘트를 달 수 있음
+
+ /*
+ 복수 라인에 대한 코멘트
+ int c;
+ int d;
+ */
+ }
+}
\ No newline at end of file
diff --git a/Ex3.DataType/Ex3.DataType.csproj b/Ex3.DataType/Ex3.DataType.csproj
new file mode 100644
index 0000000..2150e37
--- /dev/null
+++ b/Ex3.DataType/Ex3.DataType.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
diff --git a/Ex3.DataType/Program.cs b/Ex3.DataType/Program.cs
new file mode 100644
index 0000000..d4bb001
--- /dev/null
+++ b/Ex3.DataType/Program.cs
@@ -0,0 +1,48 @@
+// See https://aka.ms/new-console-template for more information
+
+//리터널
+/*
+123 // int 리터럴
+12.3 // double 리터럴
+"A" // string 리터럴
+'a' // char 리터럴
+true // bool 리터럴
+*/
+
+// Bool
+bool b = true;
+
+// Numeric
+short sh = -32768;
+int i = 2147483647;
+long l = 1234L; // L suffix
+float f = 123.45F; // F suffix
+double d1 = 123.45;
+double d2 = 123.45D; // D suffix
+decimal d = 123.45M; // M suffix
+
+// Char/String
+char c = 'A';
+string s = "Hello";
+
+// DateTime 2011-10-30 12:35
+DateTime dt = new DateTime(2011, 10, 30, 12, 35, 0);
+
+//최대 최소
+int iMax = int.MaxValue;
+float fMin = float.MinValue;
+
+//null
+string sn;
+sn = null;
+
+// Nullable 타입
+int? inl = null;
+inl = 101;
+
+bool? bnl = null;
+
+//int? 를 int로 할당
+Nullable j = null;
+j = 10;
+int k = j.Value;
diff --git a/Ex4.VariableConstant/Ex4.VariableConstant.csproj b/Ex4.VariableConstant/Ex4.VariableConstant.csproj
new file mode 100644
index 0000000..2150e37
--- /dev/null
+++ b/Ex4.VariableConstant/Ex4.VariableConstant.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
diff --git a/Ex4.VariableConstant/Program.cs b/Ex4.VariableConstant/Program.cs
new file mode 100644
index 0000000..e090134
--- /dev/null
+++ b/Ex4.VariableConstant/Program.cs
@@ -0,0 +1,43 @@
+class CSVar
+{
+ //필드 (클래스 내에서 공통적으로 사용되는 전역 변수)
+ int globalVar;
+ const int MAX = 1024;
+
+ public void Method1()
+ {
+ // 로컬변수
+ int localVar;
+
+ // 아래 할당이 없으면 에러 발생
+ localVar = 100;
+
+ Console.WriteLine(globalVar);
+ Console.WriteLine(localVar);
+ }
+}
+
+class CSVar2
+{
+ // 상수
+ const int MAX_VALUE = 1024;
+
+ // readonly 필드
+ readonly int Max;
+ public CSVar2()
+ {
+ Max = 1;
+ }
+
+ //...
+}
+
+internal class Program
+{
+ private static void Main(string[] args)
+ {
+ // 테스트
+ CSVar obj = new CSVar();
+ obj.Method1();
+ }
+}
\ No newline at end of file
diff --git a/Ex5.Array/Ex5.Array.csproj b/Ex5.Array/Ex5.Array.csproj
new file mode 100644
index 0000000..2150e37
--- /dev/null
+++ b/Ex5.Array/Ex5.Array.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
diff --git a/Ex5.Array/Program.cs b/Ex5.Array/Program.cs
new file mode 100644
index 0000000..4d23e5a
--- /dev/null
+++ b/Ex5.Array/Program.cs
@@ -0,0 +1,41 @@
+internal class Program
+{
+ private static void Main(string[] args)
+ {
+ // 1차 배열
+ string[] players = new string[10];
+ string[] Regions = { "서울", "경기", "부산" };
+
+ // 2차 배열 선언 및 초기화
+ string[,] Depts = { { "김과장", "경리부" }, { "이과장", "총무부" } };
+
+ // 3차 배열 선언
+ string[,,] Cubes;
+
+ //Jagged Array (가변 배열)
+ //1차 배열 크기(3)는 명시해야
+ int[][] A = new int[3][];
+
+ //각 1차 배열 요소당 서로 다른 크기의 배열 할당 가능
+ A[0] = new int[2];
+ A[1] = new int[3] { 1, 2, 3 };
+ A[2] = new int[4] { 1, 2, 3, 4 };
+
+ A[0][0] = 1;
+ A[0][1] = 2;
+
+ int[] scores = { 80, 78, 60, 90, 100 };
+ int sum = CalculateSum(scores); // 배열 전달: 배열명 사용
+ Console.WriteLine(sum);
+ }
+
+ static int CalculateSum(int[] scoresArray) // 배열 받는 쪽
+ {
+ int sum = 0;
+ for (int i = 0; i < scoresArray.Length; i++)
+ {
+ sum += scoresArray[i];
+ }
+ return sum;
+ }
+}
\ No newline at end of file
diff --git a/Ex6.String/Ex6.String.csproj b/Ex6.String/Ex6.String.csproj
new file mode 100644
index 0000000..2150e37
--- /dev/null
+++ b/Ex6.String/Ex6.String.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
diff --git a/Ex6.String/Program.cs b/Ex6.String/Program.cs
new file mode 100644
index 0000000..177f7d2
--- /dev/null
+++ b/Ex6.String/Program.cs
@@ -0,0 +1,57 @@
+// See https://aka.ms/new-console-template for more information
+// 문자열(string) 변수
+using System.Text;
+
+string s1 = "C#";
+string s2 = "Programming";
+
+// 문자(char) 변수
+char c1 = 'A';
+char c2 = 'B';
+
+// 문자열 결합
+string s3 = s1 + " " + s2;
+Console.WriteLine("String: {0}", s3);
+
+// 부분문자열 발췌
+string s3substring = s3.Substring(1, 5);
+Console.WriteLine("Substring: {0}", s3substring);
+
+string s = "C# Studies";
+
+// 문자열을 배열인덱스로 한문자 엑세스
+for (int i = 0; i < s.Length; i++)
+{
+ Console.WriteLine("{0}: {1}", i, s[i]);
+}
+
+// 문자열을 문자배열로 변환
+string str = "Hello";
+char[] charArray = str.ToCharArray();
+
+for (int i = 0; i < charArray.Length; i++)
+{
+ Console.WriteLine(charArray[i]);
+}
+
+// 문자배열을 문자열로 변환
+char[] charArray2 = { 'A', 'B', 'C', 'D' };
+s = new string(charArray2);
+
+Console.WriteLine(s);
+
+// 문자 연산
+char c3 = 'A';
+char c4 = (char)(c3 + 3);
+Console.WriteLine(c3); // D 출력
+
+//StringBuilder 사용
+StringBuilder sb = new StringBuilder();
+for (int i = 1; i <= 26; i++)
+{
+ sb.Append(i.ToString());
+ sb.Append(System.Environment.NewLine);
+}
+string sbstr = sb.ToString();
+
+Console.WriteLine(sbstr);
diff --git a/Ex7.Enum/Ex7.Enum.csproj b/Ex7.Enum/Ex7.Enum.csproj
new file mode 100644
index 0000000..2150e37
--- /dev/null
+++ b/Ex7.Enum/Ex7.Enum.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
diff --git a/Ex7.Enum/Program.cs b/Ex7.Enum/Program.cs
new file mode 100644
index 0000000..4032634
--- /dev/null
+++ b/Ex7.Enum/Program.cs
@@ -0,0 +1,52 @@
+internal class Program
+{
+ enum City
+ {
+ Seoul, // 0
+ Daejun, // 1
+ Busan = 5, // 5
+ Jeju = 10 // 10
+ }
+
+ [Flags]
+ enum Border
+ {
+ None = 0,
+ Top = 1,
+ Right = 2,
+ Bottom = 4,
+ Left = 8
+ }
+
+ private static void Main(string[] args)
+ {
+ City myCity;
+
+ // enum 타입에 값을 대입하는 방법
+ myCity = City.Seoul;
+
+ // enum을 int로 변환(Casting)하는 방법.
+ // (int)를 앞에 지정.
+ int cityValue = (int)myCity;
+
+ if (myCity == City.Seoul) // enum 값을 비교하는 방법
+ {
+ Console.WriteLine("Welcome to Seoul");
+ }
+
+ // OR 연산자로 다중 플래그 할당
+ Border b = Border.Top | Border.Bottom;
+
+ // & 연산자로 플래그 체크
+ if ((b & Border.Top) != 0)
+ {
+ //HasFlag()이용 플래그 체크
+ if (b.HasFlag(Border.Bottom))
+ {
+ // "Top, Bottom" 출력
+ Console.WriteLine(b.ToString());
+ }
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/Ex8.Operators/Ex8.Operators.csproj b/Ex8.Operators/Ex8.Operators.csproj
new file mode 100644
index 0000000..2150e37
--- /dev/null
+++ b/Ex8.Operators/Ex8.Operators.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
diff --git a/Ex8.Operators/Program.cs b/Ex8.Operators/Program.cs
new file mode 100644
index 0000000..548adc8
--- /dev/null
+++ b/Ex8.Operators/Program.cs
@@ -0,0 +1,37 @@
+// See https://aka.ms/new-console-template for more information
+int x, y, z, b, c, d;
+x = y = z = b = c = d = 2;
+
+//산술연산자
+int a = (x + y - z) * (b / c) % d;
+
+//할당연산자
+int sum = 0;
+sum += a;
+
+//증감연산자
+sum++;
+--sum;
+
+//논리연산자
+bool isOk = true;
+if ((a > 1 && b < 0) || c == 1 || !isOk);
+
+//비교연산자
+if (a <= b)
+{
+ int rst = b - a;
+}
+
+//비트연산자
+byte b1 = 7;
+int b4 = (b1 & 3) | 4 ^ 5;
+
+//비트이동연산자
+int i = 2;
+i = i << 5;
+
+//조건연산자
+int val = (a > b) ? a : b;
+string str = null;
+string s = str ?? "(널)";
diff --git a/Ex9.Condition/Ex9.Condition.csproj b/Ex9.Condition/Ex9.Condition.csproj
new file mode 100644
index 0000000..2150e37
--- /dev/null
+++ b/Ex9.Condition/Ex9.Condition.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
diff --git a/Ex9.Condition/Program.cs b/Ex9.Condition/Program.cs
new file mode 100644
index 0000000..2557eae
--- /dev/null
+++ b/Ex9.Condition/Program.cs
@@ -0,0 +1,70 @@
+using System.Diagnostics;
+
+internal class Program
+{
+ static bool verbose = false;
+ static bool continueOnError = false;
+ static bool logging = false;
+
+ private static void Main(string[] args)
+ {
+ int a = -11;
+ int val;
+ if (a >= 0)
+ {
+ val = a;
+ }
+ else
+ {
+ val = -a;
+ }
+
+ // 출력값 : 11
+ Console.Write(val);
+
+ Console.WriteLine("과일 이름?");
+ var category = Console.ReadLine();
+ int price;
+ switch (category)
+ {
+ case "사과":
+ price = 1000;
+ break;
+ case "딸기":
+ price = 1100;
+ break;
+ case "포도":
+ price = 900;
+ break;
+ default:
+ price = 0;
+ break;
+ }
+
+ Console.WriteLine($"{category} 가격은 {price} 입니다.");
+
+ if (args.Length != 1)
+ {
+ Console.WriteLine("Usage: MyApp.exe option");
+ return;
+ }
+
+ string option = args[0];
+ switch (option.ToLower())
+ {
+ case "/v":
+ case "/verbose":
+ verbose = true;
+ break;
+ case "/c":
+ continueOnError = true;
+ break;
+ case "/l":
+ logging = true;
+ break;
+ default:
+ Console.WriteLine("Unknown argument: {0}", option);
+ break;
+ }
+ }
+}
\ No newline at end of file
diff --git a/ExA.Loop/ExA.Loop.csproj b/ExA.Loop/ExA.Loop.csproj
new file mode 100644
index 0000000..2150e37
--- /dev/null
+++ b/ExA.Loop/ExA.Loop.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
diff --git a/ExA.Loop/Program.cs b/ExA.Loop/Program.cs
new file mode 100644
index 0000000..0c6467f
--- /dev/null
+++ b/ExA.Loop/Program.cs
@@ -0,0 +1,73 @@
+// See https://aka.ms/new-console-template for more information
+
+// for 루프
+using System.Diagnostics;
+
+for (int x = 0; x < 10; x++)
+{
+ Console.WriteLine("Loop {0}", x);
+}
+
+string[] array = new string[] { "AB", "CD", "EF" };
+
+// foreach 루프
+foreach (string s in array)
+{
+ Console.WriteLine(s);
+}
+
+// 3차배열 선언
+string[,,] arr = new string[,,] {
+ { {"1", "2"}, {"11","22"} },
+ { {"3", "4"}, {"33", "44"} }
+ };
+
+//for 루프 : 3번 루프를 만들어 돌림
+for (int i = 0; i < arr.GetLength(0); i++)
+{
+ for (int j = 0; j < arr.GetLength(1); j++)
+ {
+ for (int k = 0; k < arr.GetLength(2); k++)
+ {
+ Debug.WriteLine(arr[i, j, k]);
+ }
+ }
+}
+
+//foreach 루프 : 한번에 3차배열 모두 처리
+foreach (var s in arr)
+{
+ Debug.WriteLine(s);
+}
+
+int y = 1;
+
+// while 루프
+while (y <= 10)
+{
+ Console.WriteLine(y);
+ y++;
+}
+
+y = 0;
+// do ~ while 루프
+do
+{
+ Console.WriteLine(y);
+ y++;
+} while (y < 10);
+
+//Enumerable
+List keyList = new List();
+ConsoleKeyInfo key;
+do
+{
+ key = Console.ReadKey();
+ keyList.Add(key.KeyChar);
+} while (key.Key != ConsoleKey.Q); // Q가 아니면 계속
+
+Console.WriteLine();
+foreach (char ch in keyList) // 리스트 루프
+{
+ Console.Write(ch);
+}
diff --git a/ExB.Yield/ExB.Yield.csproj b/ExB.Yield/ExB.Yield.csproj
new file mode 100644
index 0000000..2150e37
--- /dev/null
+++ b/ExB.Yield/ExB.Yield.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
diff --git a/ExB.Yield/Program.cs b/ExB.Yield/Program.cs
new file mode 100644
index 0000000..5142755
--- /dev/null
+++ b/ExB.Yield/Program.cs
@@ -0,0 +1,50 @@
+internal class Program
+{
+ static IEnumerable GetNumber()
+ {
+ yield return 10; // 첫번째 루프에서 리턴되는 값
+ yield return 20; // 두번째 루프에서 리턴되는 값
+ yield return 30; // 세번째 루프에서 리턴되는 값
+ }
+
+ public class MyList
+ {
+ private int[] data = { 1, 2, 3, 4, 5 };
+
+ public IEnumerator GetEnumerator()
+ {
+ int i = 0;
+ while (i < data.Length)
+ {
+ yield return data[i];
+ i++;
+ }
+ }
+
+ //...
+ }
+
+
+ private static void Main(string[] args)
+ {
+ foreach (int num in GetNumber())
+ {
+ Console.WriteLine(num);
+ }
+
+ // (1) foreach 사용하여 Iteration
+ var list = new MyList();
+
+ foreach (var item in list)
+ {
+ Console.WriteLine(item);
+ }
+
+ // (2) 수동 Iteration
+ IEnumerator it = list.GetEnumerator();
+ it.MoveNext();
+ Console.WriteLine(it.Current); // 1
+ it.MoveNext();
+ Console.WriteLine(it.Current); // 2
+ }
+}
\ No newline at end of file
diff --git a/ExC.Exception/ExC.Exception.csproj b/ExC.Exception/ExC.Exception.csproj
new file mode 100644
index 0000000..2150e37
--- /dev/null
+++ b/ExC.Exception/ExC.Exception.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
diff --git a/ExC.Exception/Program.cs b/ExC.Exception/Program.cs
new file mode 100644
index 0000000..abeb73d
--- /dev/null
+++ b/ExC.Exception/Program.cs
@@ -0,0 +1,64 @@
+class MyException : Exception
+{
+ public string MyMessage = string.Empty;
+ public MyException(string message, Exception ex) :base(ex.Message)
+ {
+ MyMessage = message;
+ }
+}
+
+internal class Program
+{
+ static void Step1()
+ {
+ throw new IndexOutOfRangeException();
+ }
+ static void Step2()
+ {
+ throw new FileNotFoundException();
+ }
+ static void Step3()
+ {
+ throw new Exception();
+ }
+ static bool Log(Exception ex)
+ {
+ Console.WriteLine($"{DateTime.Now.ToString("yy/MM/dd HH:mm:ss")} - {ex.Message}");
+ return true;
+ }
+
+ private static void Main(string[] args)
+ {
+ try
+ {
+ // 실행 문장들
+ Step1();
+ Step2();
+ Step3();
+ }
+ catch (IndexOutOfRangeException ex)
+ {
+ // 새로운 Exception 생성하여 throw
+ throw new MyException("Invalid index", ex);
+ }
+ catch (FileNotFoundException ex)
+ {
+ bool success = Log(ex);
+ if (!success)
+ {
+ // 기존 Exception을 throw
+ throw ex;
+ }
+ }
+ catch (Exception ex)
+ {
+ Log(ex);
+ // 발생된 Exception을 그대로 호출자에 전달
+ throw;
+ }
+ finally
+ {
+ //TODO 사용한 메모리 정리 코드
+ }
+ }
+}
\ No newline at end of file
diff --git a/ExD.NameSpace/ExD.NameSpace.csproj b/ExD.NameSpace/ExD.NameSpace.csproj
new file mode 100644
index 0000000..2150e37
--- /dev/null
+++ b/ExD.NameSpace/ExD.NameSpace.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
diff --git a/ExD.NameSpace/Program.cs b/ExD.NameSpace/Program.cs
new file mode 100644
index 0000000..95b9de4
--- /dev/null
+++ b/ExD.NameSpace/Program.cs
@@ -0,0 +1,21 @@
+using MySystem.MySubSystem;
+
+internal class Program
+{
+ private static void Main(string[] args)
+ {
+ Class1 cls = new MySystem.MySubSystem.Class1();
+ }
+}
+
+namespace MySystem.MySubSystem
+{
+ public class Class1
+ {
+ public int Calculate(int a, int b)
+ {
+ int abs_Sum = System.Math.Abs(a) + Math.Abs(b);
+ return abs_Sum;
+ }
+ }
+}
diff --git a/ExE.Struct/ExE.Struct.csproj b/ExE.Struct/ExE.Struct.csproj
new file mode 100644
index 0000000..2150e37
--- /dev/null
+++ b/ExE.Struct/ExE.Struct.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
diff --git a/ExE.Struct/Program.cs b/ExE.Struct/Program.cs
new file mode 100644
index 0000000..f7367eb
--- /dev/null
+++ b/ExE.Struct/Program.cs
@@ -0,0 +1,45 @@
+internal class Program
+{
+ // 구조체 정의
+ struct MyPoint
+ {
+ public int X;
+ public int Y;
+
+ public MyPoint(int x, int y)
+ {
+ this.X = x;
+ this.Y = y;
+ }
+
+ public override string ToString()
+ {
+ return string.Format("({0}, {1})", X, Y);
+ }
+ }
+
+ sealed class MyPointC
+ {
+ public int X;
+ public int Y;
+
+ public MyPointC(int x, int y)
+ {
+ this.X = x;
+ this.Y = y;
+ }
+
+ public override string ToString()
+ {
+ return string.Format("({0}, {1})", X, Y);
+ }
+ }
+
+ private static void Main(string[] args)
+ {
+ // 구조체 사용
+ MyPoint pt = new MyPoint(10, 12);
+ Console.WriteLine(pt.ToString());
+
+ }
+}
\ No newline at end of file
diff --git a/ExF.Class/ExF.Class.csproj b/ExF.Class/ExF.Class.csproj
new file mode 100644
index 0000000..2150e37
--- /dev/null
+++ b/ExF.Class/ExF.Class.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
diff --git a/ExF.Class/MyCustomer.cs b/ExF.Class/MyCustomer.cs
new file mode 100644
index 0000000..0d08772
--- /dev/null
+++ b/ExF.Class/MyCustomer.cs
@@ -0,0 +1,56 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ExF.Class
+{
+ public class MyCustomer
+ {
+ // 필드
+ private string name;
+ private int age;
+
+ // 이벤트
+ public event EventHandler NameChanged;
+
+ // 생성자 (Constructor)
+ public MyCustomer()
+ {
+ name = string.Empty;
+ age = -1;
+ }
+
+ // 속성
+ public string Name
+ {
+ get { return this.name; }
+ set
+ {
+ if (this.name != value)
+ {
+ this.name = value;
+ if (NameChanged != null)
+ {
+ NameChanged(this, EventArgs.Empty);
+ }
+ }
+ }
+ }
+ public int Age
+ {
+ get { return this.age; }
+ set { this.age = value; }
+ }
+
+ // 메서드
+ public string GetCustomerData()
+ {
+ string data = string.Format("Name: {0} (Age: {1})",
+ this.Name, this.Age);
+ return data;
+ }
+ }
+
+}
diff --git a/ExF.Class/Program.cs b/ExF.Class/Program.cs
new file mode 100644
index 0000000..36a2825
--- /dev/null
+++ b/ExF.Class/Program.cs
@@ -0,0 +1,13 @@
+using ExF.Class;
+
+internal class Program
+{
+ private static void Main(string[] args)
+ {
+ MyCustomer customer1 = new MyCustomer();
+ MyCustomer customer2 = new();
+ var customer3 = new MyCustomer();
+
+
+ }
+}
\ No newline at end of file
diff --git a/ExG.Nullable/ExG.Nullable.csproj b/ExG.Nullable/ExG.Nullable.csproj
new file mode 100644
index 0000000..2150e37
--- /dev/null
+++ b/ExG.Nullable/ExG.Nullable.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
diff --git a/ExG.Nullable/Program.cs b/ExG.Nullable/Program.cs
new file mode 100644
index 0000000..490c933
--- /dev/null
+++ b/ExG.Nullable/Program.cs
@@ -0,0 +1,43 @@
+internal class Program
+{
+ private static void Main(string[] args)
+ {
+ MyClass cls = new();
+ cls.NullableTest();
+ }
+
+}
+
+class MyClass
+{
+ double _Sum = 0;
+ DateTime _Time;
+ bool? _Selected;
+
+ public void CheckInput(int? i, double? d, DateTime? time, bool? selected)
+ {
+ if (i.HasValue && d.HasValue)
+ this._Sum = (double)i.Value + (double)d.Value;
+
+ // time값이 있는 체크.
+ if (!time.HasValue)
+ throw new ArgumentException();
+ else
+ this._Time = time.Value;
+
+ // 만약 selected가 NULL이면 false를 할당
+ this._Selected = selected ?? false;
+ }
+ public void NullableTest()
+ {
+ int? a = null;
+ int? b = 0;
+ int result = Nullable.Compare(a, b);
+ Console.WriteLine(result); //결과 -1
+
+ double? c = 0.01;
+ double? d = 0.0100;
+ bool result2 = Nullable.Equals(c, d);
+ Console.WriteLine(result2); //결과 true
+ }
+}
\ No newline at end of file
diff --git a/ExH.Parameters/ExH.Parameters.csproj b/ExH.Parameters/ExH.Parameters.csproj
new file mode 100644
index 0000000..2150e37
--- /dev/null
+++ b/ExH.Parameters/ExH.Parameters.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
diff --git a/ExH.Parameters/Program.cs b/ExH.Parameters/Program.cs
new file mode 100644
index 0000000..17b3d64
--- /dev/null
+++ b/ExH.Parameters/Program.cs
@@ -0,0 +1,65 @@
+internal class Program
+{
+ private void Calculate(int a)
+ {
+ a *= 2;
+ }
+ static double GetData(ref int a, ref double b)
+ { return ++a * ++b; }
+
+ // out 정의
+ static bool GetData(int a, int b, out int c, out int d)
+ {
+ c = a + b;
+ d = a - b;
+ return true;
+ }
+
+ int Calc(int a, int b, string calcType = "+")
+ {
+ switch (calcType)
+ {
+ case "+":
+ return a + b;
+ case "-":
+ return a - b;
+ case "*":
+ return a * b;
+ case "/":
+ return a / b;
+ default:
+ throw new ArithmeticException();
+ }
+ }
+
+ double Calc(params double[] doubles)
+ {
+ return doubles.Sum();
+ }
+
+ private static void Main(string[] args)
+ {
+ Program p = new Program();
+
+ int val = 100;
+ p.Calculate(val);
+ // val는 그대로 100
+ Console.WriteLine($"val = {val} ");
+
+ // ref 사용. 초기화 필요.
+ int x = 1;
+ double y = 1.0;
+ double ret = GetData(ref x, ref y);
+ Console.WriteLine($"x = {x}, y = {y} ");
+
+ // out 사용. 초기화 불필요.
+ int c, d;
+ bool bret = GetData(10, 20, out c, out d);
+ Console.WriteLine($"c = {c}, d = {d} ");
+
+ p.Calc(1, 2);
+ p.Calc(4, 3, "-");
+ p.Calc(1.1, 2.2, 3.3, 4.4);
+
+ }
+}
\ No newline at end of file
diff --git a/ExI.Event/ExI.Event.csproj b/ExI.Event/ExI.Event.csproj
new file mode 100644
index 0000000..2150e37
--- /dev/null
+++ b/ExI.Event/ExI.Event.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
diff --git a/ExI.Event/MyClass.cs b/ExI.Event/MyClass.cs
new file mode 100644
index 0000000..8d00a9d
--- /dev/null
+++ b/ExI.Event/MyClass.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ExI.Event
+{
+ class MyClass
+ {
+ public event EventHandler? Complished;
+
+ public void Calc(int complexity)
+ {
+ Thread.Sleep(complexity);
+ Complished?.Invoke(this, EventArgs.Empty);
+ }
+ }
+}
diff --git a/ExI.Event/Program.cs b/ExI.Event/Program.cs
new file mode 100644
index 0000000..f015654
--- /dev/null
+++ b/ExI.Event/Program.cs
@@ -0,0 +1,12 @@
+// See https://aka.ms/new-console-template for more information
+using ExI.Event;
+
+var mycls = new MyClass();
+mycls.Complished += Mycls_Complished;
+
+void Mycls_Complished(object? sender, EventArgs e)
+{
+ Console.WriteLine("작업끝");
+}
+
+mycls.Calc(2000);
diff --git a/ExJ.Preprocessor/ExJ.Preprocessor.csproj b/ExJ.Preprocessor/ExJ.Preprocessor.csproj
new file mode 100644
index 0000000..2150e37
--- /dev/null
+++ b/ExJ.Preprocessor/ExJ.Preprocessor.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
diff --git a/ExJ.Preprocessor/Program.cs b/ExJ.Preprocessor/Program.cs
new file mode 100644
index 0000000..3293625
--- /dev/null
+++ b/ExJ.Preprocessor/Program.cs
@@ -0,0 +1,76 @@
+#define TEST_ENV
+#define STANDARD_EDITION
+#define ENTERPRISE_EDITION
+
+#if (!ENTERPRISE_EDITION)
+#warning This class should be used in Enterprise Edition
+#elif (!STANDARD_EDITION)
+#error 최소 스탠다드 버젼은 되어야합니다.
+#else
+class EnterpriseClass
+{
+
+}
+#endif
+
+internal class Program
+{
+ private static void Main(string[] args)
+ {
+ bool verbose = false;
+ // ...
+
+#if (TEST_ENV)
+ Console.WriteLine("Test Environment: Verbose option is set.");
+ verbose = true;
+#else
+ Console.WriteLine("Production");
+#endif
+
+ if (verbose)
+ {
+ //....
+ }
+
+ }
+}
+
+
+class ClassA
+{
+ #region Public Methods
+ public void Run() { }
+ public void Create() { }
+ #endregion
+
+ #region Public Properties
+ public int Id { get; set; }
+ #endregion
+
+ #region Privates
+ private void Execute() { }
+ #endregion
+}
+
+#pragma warning disable 3021
+
+namespace App1
+{
+ [System.CLSCompliant(false)]
+ class Program
+ {
+ static void Main(string[] args)
+ {
+ //...
+
+#pragma warning disable
+ if (false)
+ {
+ Console.WriteLine("TBD");
+ }
+#pragma warning restore
+
+ //...
+ }
+ }
+}
diff --git a/ExK.Indexer/ExK.Indexer.csproj b/ExK.Indexer/ExK.Indexer.csproj
new file mode 100644
index 0000000..2150e37
--- /dev/null
+++ b/ExK.Indexer/ExK.Indexer.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
diff --git a/ExK.Indexer/Program.cs b/ExK.Indexer/Program.cs
new file mode 100644
index 0000000..ead1e72
--- /dev/null
+++ b/ExK.Indexer/Program.cs
@@ -0,0 +1,47 @@
+internal class Program
+{
+ class MyClass
+ {
+ private const int MAX = 10;
+ private string name;
+
+ // 내부의 정수 배열 데이타
+ private int[] data = new int[MAX];
+
+ // 인덱서 정의. int 파라미터 사용
+ public int this[int index]
+ {
+ get
+ {
+ if (index < 0 || index >= MAX)
+ {
+ throw new IndexOutOfRangeException();
+ }
+ else
+ {
+ // 정수배열로부터 값 리턴
+ return data[index];
+ }
+ }
+ set
+ {
+ if (!(index < 0 || index >= MAX))
+ {
+ // 정수배열에 값 저장
+ data[index] = value;
+ }
+ }
+ }
+ }
+
+ private static void Main(string[] args)
+ {
+ MyClass cls = new MyClass();
+
+ // 인덱서 set 사용
+ cls[1] = 1024;
+
+ // 인덱서 get 사용
+ int i = cls[1];
+ }
+}
\ No newline at end of file
diff --git a/ExL.AccessModifier/ExL.AccessModifier.csproj b/ExL.AccessModifier/ExL.AccessModifier.csproj
new file mode 100644
index 0000000..2150e37
--- /dev/null
+++ b/ExL.AccessModifier/ExL.AccessModifier.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
diff --git a/ExL.AccessModifier/Program.cs b/ExL.AccessModifier/Program.cs
new file mode 100644
index 0000000..6f6f082
--- /dev/null
+++ b/ExL.AccessModifier/Program.cs
@@ -0,0 +1,24 @@
+internal class Program
+{
+ private static void Main(string[] args)
+ {
+ var mycls = new MyClass();
+ mycls.Name = "철수";
+ mycls.Run(100);
+ //mycls._id = 100; //에러
+ //mycls.Execute() //에러
+ }
+
+
+ internal class MyClass
+ {
+ private int _id = 0;
+
+ public string Name { get; set; }
+
+ public void Run(int id) { }
+
+ protected void Execute() { }
+ }
+
+}
\ No newline at end of file
diff --git a/ExM.Inheritance/ExM.Inheritance.csproj b/ExM.Inheritance/ExM.Inheritance.csproj
new file mode 100644
index 0000000..2150e37
--- /dev/null
+++ b/ExM.Inheritance/ExM.Inheritance.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
diff --git a/ExM.Inheritance/Program.cs b/ExM.Inheritance/Program.cs
new file mode 100644
index 0000000..ca10f7b
--- /dev/null
+++ b/ExM.Inheritance/Program.cs
@@ -0,0 +1,113 @@
+// 베이스 클래스
+public class Animal
+{
+ public string Name { get; set; }
+ public int Age { get; set; }
+}
+
+// 파생클래스
+public class Dog : Animal
+{
+ public void HowOld()
+ {
+ // 베이스 클래스의 Age 속성 사용
+ Console.WriteLine("나이: {0}", this.Age);
+ }
+}
+
+public class Bird : Animal
+{
+ public void Fly()
+ {
+ Console.WriteLine("{0}가 날다", this.Name);
+ }
+}
+
+
+public class VirBase
+{
+ public virtual void Say()
+ {
+ Console.WriteLine("Hello");
+ }
+}
+
+public class SpeakerA : VirBase
+{
+ public override void Say()
+ {
+ Console.WriteLine("World");
+ }
+}
+
+public abstract class PureBase
+{
+ // abstract C#키워드
+ public abstract int GetFirst();
+ public abstract int GetNext();
+}
+
+public class DerivedA : PureBase
+{
+ private int no = 1;
+
+ // override C#키워드
+ public override int GetFirst()
+ {
+ return no;
+ }
+
+ public override int GetNext()
+ {
+ return ++no;
+ }
+}
+
+public class MyBase
+{
+ public string Name { get; set; }
+ protected int Age { get; set; }
+}
+
+public class MyDerived : MyBase
+{
+ public void Run()
+ {
+ // 파생클래스이므로 Age 사용 가능
+ Console.WriteLine("나이: {0}", this.Age);
+ }
+}
+
+internal class Program
+{
+ private static void Main(string[] args)
+ {
+ var dog = new Dog();
+ dog.Name = "멍멍이";
+ dog.Age = 10;
+ var bird = new Bird();
+ bird.Name = "삐약이";
+
+ dog.HowOld();
+ bird.Fly();
+
+ Animal[] animals = { dog, bird };
+ foreach (var animal in animals)
+ {
+ Console.WriteLine($"{animal.Name}");
+ }
+
+ }
+ public void Test(object obj)
+ {
+ // as 연산자
+ MyBase a = obj as MyBase;
+
+ // is 연산자
+ bool ok = obj is MyBase; //true
+
+ // Explicit Casting
+ MyBase b = (MyBase)obj;
+ }
+
+}
\ No newline at end of file
diff --git a/ExN.Static/ExN.Static.csproj b/ExN.Static/ExN.Static.csproj
new file mode 100644
index 0000000..2150e37
--- /dev/null
+++ b/ExN.Static/ExN.Static.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
diff --git a/ExN.Static/Program.cs b/ExN.Static/Program.cs
new file mode 100644
index 0000000..3eaf016
--- /dev/null
+++ b/ExN.Static/Program.cs
@@ -0,0 +1,61 @@
+public class MyClass
+{
+ private int val = 1;
+
+ // 인스턴스 메서드
+ public int InstRun()
+ {
+ return val;
+ }
+
+ // 정적(Static) 메서드
+ public static int Run()
+ {
+ return 1;
+ }
+}
+
+public class Client
+{
+ public void Test()
+ {
+ // 인스턴스 메서드 호출
+ MyClass myClass = new MyClass();
+ int i = myClass.InstRun();
+
+ // 정적 메서드 호출
+ int j = MyClass.Run();
+ }
+}
+
+// static 클래스 정의
+public static class MyUtility
+{
+ private static int ver;
+
+ // static 생성자
+ static MyUtility()
+ {
+ ver = 1;
+ }
+
+ public static string Convert(int i)
+ {
+ return i.ToString();
+ }
+
+ public static int ConvertBack(string s)
+ {
+ return int.Parse(s);
+ }
+}
+
+
+internal class Program
+{
+ private static void Main(string[] args)
+ {
+ string str = MyUtility.Convert(123);
+ int i = MyUtility.ConvertBack(str);
+ }
+}
\ No newline at end of file
diff --git a/ExO.Generic/ExO.Generic.csproj b/ExO.Generic/ExO.Generic.csproj
new file mode 100644
index 0000000..2150e37
--- /dev/null
+++ b/ExO.Generic/ExO.Generic.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
diff --git a/ExO.Generic/Program.cs b/ExO.Generic/Program.cs
new file mode 100644
index 0000000..a750242
--- /dev/null
+++ b/ExO.Generic/Program.cs
@@ -0,0 +1,58 @@
+class MyStack
+{
+ T[] _elements;
+ int pos = 0;
+
+ public MyStack()
+ {
+ _elements = new T[100];
+ }
+
+ public void Push(T element)
+ {
+ _elements[++pos] = element;
+ }
+
+ public T Pop()
+ {
+ return _elements[pos--];
+ }
+}
+
+internal class Program
+{
+ private static void Main(string[] args)
+ {
+
+ // 두 개의 서로 다른 타입을 갖는 스택 객체를 생성
+ MyStack numberStack = new MyStack();
+ MyStack nameStack = new MyStack();
+ }
+}
+
+// T는 Value 타입
+class MyClassS where T : struct { }
+
+// T는 Reference 타입
+class MyClassC where T : class { }
+
+// T는 디폴트 생성자를 가져야 함
+class MyClassD where T : new() { }
+
+// T는 EventArgs의 파생클래스이어야 함
+class MyClassMyBase where T : EventArgs { }
+
+// T는 IComparable 인터페이스를 가져야 함
+class MyClass where T : IComparable { }
+
+// 좀 더 복잡한 제약들
+class EmployeeList where T : EventArgs, IDisposable, IComparable, new()
+{
+}
+
+// 복수 타입 파라미터 제약
+class MyClass
+ where T : class
+ where U : struct
+{
+}
\ No newline at end of file
diff --git a/ExP.Interface/ExP.Interface.csproj b/ExP.Interface/ExP.Interface.csproj
new file mode 100644
index 0000000..2150e37
--- /dev/null
+++ b/ExP.Interface/ExP.Interface.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
diff --git a/ExP.Interface/Program.cs b/ExP.Interface/Program.cs
new file mode 100644
index 0000000..dcda4dc
--- /dev/null
+++ b/ExP.Interface/Program.cs
@@ -0,0 +1,35 @@
+using System.ComponentModel;
+using System.Data;
+
+public class MyConnection : Component, IDbConnection, IDisposable
+{
+ // IDbConnection을 구현
+ // IDisposable을 구현
+}
+
+internal class Program
+{
+ private static void Main(string[] args)
+ {
+ Console.WriteLine("Hello, World!");
+ }
+}
+
+public interface IComparable
+{
+ // 멤버 앞에 접근제한자 사용 안함
+ int CompareTo(object obj);
+}
+
+public class MyClass : IComparable
+{
+ private int key;
+ private int value;
+
+ // IComparable 의 CompareTo 메서드 구현
+ public int CompareTo(object obj)
+ {
+ MyClass target = (MyClass)obj;
+ return this.key.CompareTo(target.key);
+ }
+}
\ No newline at end of file
diff --git a/ExQ.Delegate1/ExQ.Delegate1.csproj b/ExQ.Delegate1/ExQ.Delegate1.csproj
new file mode 100644
index 0000000..2150e37
--- /dev/null
+++ b/ExQ.Delegate1/ExQ.Delegate1.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
diff --git a/ExQ.Delegate1/Program.cs b/ExQ.Delegate1/Program.cs
new file mode 100644
index 0000000..45d4f0a
--- /dev/null
+++ b/ExQ.Delegate1/Program.cs
@@ -0,0 +1,34 @@
+internal class Program
+{
+ static void Main(string[] args)
+ {
+ new Program().Test();
+ }
+
+ // 델리게이트 정의
+ delegate int MyDelegate(string s);
+
+ void Test()
+ {
+ //델리게이트 객체 생성
+ MyDelegate m = new MyDelegate(StringToInt);
+
+ //델리게이트 객체를 메서드로 전달
+ Run(m);
+ }
+
+ // 델리게이트 대상이 되는 어떤 메서드
+ int StringToInt(string s)
+ {
+ return int.Parse(s);
+ }
+
+ // 델리게이트를 전달 받는 메서드
+ void Run(MyDelegate m)
+ {
+ // 델리게이트로부터 메서드 실행
+ int i = m("123");
+
+ Console.WriteLine(i);
+ }
+}
\ No newline at end of file
diff --git a/Ojt.Lectures.sln b/Ojt.Lectures.sln
new file mode 100644
index 0000000..352c070
--- /dev/null
+++ b/Ojt.Lectures.sln
@@ -0,0 +1,175 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.13.35806.99 d17.13
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ex2.Comment", "Ex2.Comment\Ex2.Comment.csproj", "{4FC56CD5-D7C4-41D5-91B9-EC406225A715}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ex1.HelloWorld", "Ex1.HelloWorld\Ex1.HelloWorld.csproj", "{39ABAB47-45AD-4E0C-866F-E12810D1CBFF}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ex3.DataType", "Ex3.DataType\Ex3.DataType.csproj", "{B0DCAEBE-EBCC-4929-8B61-93E5853BA9F6}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ex4.VariableConstant", "Ex4.VariableConstant\Ex4.VariableConstant.csproj", "{AB320A4A-367C-4052-850B-9D79E53A0421}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ex5.Array", "Ex5.Array\Ex5.Array.csproj", "{5CC1E4EB-4C16-4B63-A38E-65E7F13AC08C}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ex6.String", "Ex6.String\Ex6.String.csproj", "{6A2134F4-B4FD-4313-9DDB-EF9E426A96FF}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ex7.Enum", "Ex7.Enum\Ex7.Enum.csproj", "{21FE3B80-B9E9-4406-B304-BEBBEC22B47B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ex8.Operators", "Ex8.Operators\Ex8.Operators.csproj", "{AB468895-F089-41AD-AB4F-4FB04045499E}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ex9.Condition", "Ex9.Condition\Ex9.Condition.csproj", "{76C94A31-D482-498B-AF5E-E239D306FC8A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExA.Loop", "ExA.Loop\ExA.Loop.csproj", "{9F1FBAFD-B984-453C-B66B-28260E4CB711}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExB.Yield", "ExB.Yield\ExB.Yield.csproj", "{ACE6B8A9-D167-40F8-8362-5AC61999BEC3}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExC.Exception", "ExC.Exception\ExC.Exception.csproj", "{8C0FDE46-2F20-4F00-9410-B2C40A045CAE}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExD.NameSpace", "ExD.NameSpace\ExD.NameSpace.csproj", "{DEE4C4CC-1C75-485C-9444-EA648AD8467F}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExE.Struct", "ExE.Struct\ExE.Struct.csproj", "{F2020660-FB06-4A6D-8D91-025E4275FA9C}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExF.Class", "ExF.Class\ExF.Class.csproj", "{02FBBE64-492D-4273-8D49-B097071B38C0}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExG.Nullable", "ExG.Nullable\ExG.Nullable.csproj", "{CF200652-DD7F-4A69-96F6-DAD022778B6D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExH.Parameters", "ExH.Parameters\ExH.Parameters.csproj", "{1EA797AC-6CAB-444D-9A6E-271851CF07DE}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExI.Event", "ExI.Event\ExI.Event.csproj", "{1C0B9F76-E191-4AE0-9455-AAF59C67A2E5}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExJ.Preprocessor", "ExJ.Preprocessor\ExJ.Preprocessor.csproj", "{BFC645DA-ACD5-4FD1-95D1-57F2416509BF}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExK.Indexer", "ExK.Indexer\ExK.Indexer.csproj", "{EB61C562-A175-4A4B-A1A5-9432619B846D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExL.AccessModifier", "ExL.AccessModifier\ExL.AccessModifier.csproj", "{249879AD-142F-45AE-AEE9-2E7C4DC1683C}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExM.Inheritance", "ExM.Inheritance\ExM.Inheritance.csproj", "{6CEE339D-335A-41FA-AC2E-2B0833D057FF}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExN.Static", "ExN.Static\ExN.Static.csproj", "{EAF589B1-F2CE-46CF-8309-E289FA0D52CB}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExO.Generic", "ExO.Generic\ExO.Generic.csproj", "{080C7BB8-7CA9-4A4E-9492-D58F633652F3}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExP.Interface", "ExP.Interface\ExP.Interface.csproj", "{51D81BEE-BA6A-4D96-9228-51A06D49FC0C}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExQ.Delegate1", "ExQ.Delegate1\ExQ.Delegate1.csproj", "{52E7A86E-720F-4111-AA1B-8C5FADE7E207}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {4FC56CD5-D7C4-41D5-91B9-EC406225A715}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4FC56CD5-D7C4-41D5-91B9-EC406225A715}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4FC56CD5-D7C4-41D5-91B9-EC406225A715}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4FC56CD5-D7C4-41D5-91B9-EC406225A715}.Release|Any CPU.Build.0 = Release|Any CPU
+ {39ABAB47-45AD-4E0C-866F-E12810D1CBFF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {39ABAB47-45AD-4E0C-866F-E12810D1CBFF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {39ABAB47-45AD-4E0C-866F-E12810D1CBFF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {39ABAB47-45AD-4E0C-866F-E12810D1CBFF}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B0DCAEBE-EBCC-4929-8B61-93E5853BA9F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B0DCAEBE-EBCC-4929-8B61-93E5853BA9F6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B0DCAEBE-EBCC-4929-8B61-93E5853BA9F6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B0DCAEBE-EBCC-4929-8B61-93E5853BA9F6}.Release|Any CPU.Build.0 = Release|Any CPU
+ {AB320A4A-367C-4052-850B-9D79E53A0421}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AB320A4A-367C-4052-850B-9D79E53A0421}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AB320A4A-367C-4052-850B-9D79E53A0421}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AB320A4A-367C-4052-850B-9D79E53A0421}.Release|Any CPU.Build.0 = Release|Any CPU
+ {5CC1E4EB-4C16-4B63-A38E-65E7F13AC08C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {5CC1E4EB-4C16-4B63-A38E-65E7F13AC08C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {5CC1E4EB-4C16-4B63-A38E-65E7F13AC08C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {5CC1E4EB-4C16-4B63-A38E-65E7F13AC08C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6A2134F4-B4FD-4313-9DDB-EF9E426A96FF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6A2134F4-B4FD-4313-9DDB-EF9E426A96FF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6A2134F4-B4FD-4313-9DDB-EF9E426A96FF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6A2134F4-B4FD-4313-9DDB-EF9E426A96FF}.Release|Any CPU.Build.0 = Release|Any CPU
+ {21FE3B80-B9E9-4406-B304-BEBBEC22B47B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {21FE3B80-B9E9-4406-B304-BEBBEC22B47B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {21FE3B80-B9E9-4406-B304-BEBBEC22B47B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {21FE3B80-B9E9-4406-B304-BEBBEC22B47B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {AB468895-F089-41AD-AB4F-4FB04045499E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AB468895-F089-41AD-AB4F-4FB04045499E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AB468895-F089-41AD-AB4F-4FB04045499E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AB468895-F089-41AD-AB4F-4FB04045499E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {76C94A31-D482-498B-AF5E-E239D306FC8A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {76C94A31-D482-498B-AF5E-E239D306FC8A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {76C94A31-D482-498B-AF5E-E239D306FC8A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {76C94A31-D482-498B-AF5E-E239D306FC8A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9F1FBAFD-B984-453C-B66B-28260E4CB711}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9F1FBAFD-B984-453C-B66B-28260E4CB711}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9F1FBAFD-B984-453C-B66B-28260E4CB711}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9F1FBAFD-B984-453C-B66B-28260E4CB711}.Release|Any CPU.Build.0 = Release|Any CPU
+ {ACE6B8A9-D167-40F8-8362-5AC61999BEC3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {ACE6B8A9-D167-40F8-8362-5AC61999BEC3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {ACE6B8A9-D167-40F8-8362-5AC61999BEC3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {ACE6B8A9-D167-40F8-8362-5AC61999BEC3}.Release|Any CPU.Build.0 = Release|Any CPU
+ {8C0FDE46-2F20-4F00-9410-B2C40A045CAE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {8C0FDE46-2F20-4F00-9410-B2C40A045CAE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8C0FDE46-2F20-4F00-9410-B2C40A045CAE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {8C0FDE46-2F20-4F00-9410-B2C40A045CAE}.Release|Any CPU.Build.0 = Release|Any CPU
+ {DEE4C4CC-1C75-485C-9444-EA648AD8467F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {DEE4C4CC-1C75-485C-9444-EA648AD8467F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {DEE4C4CC-1C75-485C-9444-EA648AD8467F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {DEE4C4CC-1C75-485C-9444-EA648AD8467F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F2020660-FB06-4A6D-8D91-025E4275FA9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F2020660-FB06-4A6D-8D91-025E4275FA9C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F2020660-FB06-4A6D-8D91-025E4275FA9C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F2020660-FB06-4A6D-8D91-025E4275FA9C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {02FBBE64-492D-4273-8D49-B097071B38C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {02FBBE64-492D-4273-8D49-B097071B38C0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {02FBBE64-492D-4273-8D49-B097071B38C0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {02FBBE64-492D-4273-8D49-B097071B38C0}.Release|Any CPU.Build.0 = Release|Any CPU
+ {CF200652-DD7F-4A69-96F6-DAD022778B6D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {CF200652-DD7F-4A69-96F6-DAD022778B6D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {CF200652-DD7F-4A69-96F6-DAD022778B6D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {CF200652-DD7F-4A69-96F6-DAD022778B6D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1EA797AC-6CAB-444D-9A6E-271851CF07DE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1EA797AC-6CAB-444D-9A6E-271851CF07DE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1EA797AC-6CAB-444D-9A6E-271851CF07DE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1EA797AC-6CAB-444D-9A6E-271851CF07DE}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1C0B9F76-E191-4AE0-9455-AAF59C67A2E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1C0B9F76-E191-4AE0-9455-AAF59C67A2E5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1C0B9F76-E191-4AE0-9455-AAF59C67A2E5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1C0B9F76-E191-4AE0-9455-AAF59C67A2E5}.Release|Any CPU.Build.0 = Release|Any CPU
+ {BFC645DA-ACD5-4FD1-95D1-57F2416509BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {BFC645DA-ACD5-4FD1-95D1-57F2416509BF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {BFC645DA-ACD5-4FD1-95D1-57F2416509BF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {BFC645DA-ACD5-4FD1-95D1-57F2416509BF}.Release|Any CPU.Build.0 = Release|Any CPU
+ {EB61C562-A175-4A4B-A1A5-9432619B846D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {EB61C562-A175-4A4B-A1A5-9432619B846D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {EB61C562-A175-4A4B-A1A5-9432619B846D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {EB61C562-A175-4A4B-A1A5-9432619B846D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {249879AD-142F-45AE-AEE9-2E7C4DC1683C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {249879AD-142F-45AE-AEE9-2E7C4DC1683C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {249879AD-142F-45AE-AEE9-2E7C4DC1683C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {249879AD-142F-45AE-AEE9-2E7C4DC1683C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6CEE339D-335A-41FA-AC2E-2B0833D057FF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6CEE339D-335A-41FA-AC2E-2B0833D057FF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6CEE339D-335A-41FA-AC2E-2B0833D057FF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6CEE339D-335A-41FA-AC2E-2B0833D057FF}.Release|Any CPU.Build.0 = Release|Any CPU
+ {EAF589B1-F2CE-46CF-8309-E289FA0D52CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {EAF589B1-F2CE-46CF-8309-E289FA0D52CB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {EAF589B1-F2CE-46CF-8309-E289FA0D52CB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {EAF589B1-F2CE-46CF-8309-E289FA0D52CB}.Release|Any CPU.Build.0 = Release|Any CPU
+ {080C7BB8-7CA9-4A4E-9492-D58F633652F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {080C7BB8-7CA9-4A4E-9492-D58F633652F3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {080C7BB8-7CA9-4A4E-9492-D58F633652F3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {080C7BB8-7CA9-4A4E-9492-D58F633652F3}.Release|Any CPU.Build.0 = Release|Any CPU
+ {51D81BEE-BA6A-4D96-9228-51A06D49FC0C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {51D81BEE-BA6A-4D96-9228-51A06D49FC0C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {51D81BEE-BA6A-4D96-9228-51A06D49FC0C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {51D81BEE-BA6A-4D96-9228-51A06D49FC0C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {52E7A86E-720F-4111-AA1B-8C5FADE7E207}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {52E7A86E-720F-4111-AA1B-8C5FADE7E207}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {52E7A86E-720F-4111-AA1B-8C5FADE7E207}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {52E7A86E-720F-4111-AA1B-8C5FADE7E207}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {A6D0271E-F7E3-439E-A090-22C197162036}
+ EndGlobalSection
+EndGlobal