From 15885a2286fec7150046baede225711ac88b4082 Mon Sep 17 00:00:00 2001 From: SONGQUE PARK Date: Wed, 5 Mar 2025 10:21:10 +0900 Subject: [PATCH] =?UTF-8?q?=EC=B4=88=EA=B8=B0=20=EC=BB=A4=EB=B0=8B.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Ex1.HelloWorld/Ex1.HelloWorld.csproj | 10 + Ex1.HelloWorld/Program.cs | 7 + Ex2.Comment/Ex2.Comment.csproj | 10 + Ex2.Comment/Program.cs | 17 ++ Ex3.DataType/Ex3.DataType.csproj | 10 + Ex3.DataType/Program.cs | 48 +++++ .../Ex4.VariableConstant.csproj | 10 + Ex4.VariableConstant/Program.cs | 43 +++++ Ex5.Array/Ex5.Array.csproj | 10 + Ex5.Array/Program.cs | 41 ++++ Ex6.String/Ex6.String.csproj | 10 + Ex6.String/Program.cs | 57 ++++++ Ex7.Enum/Ex7.Enum.csproj | 10 + Ex7.Enum/Program.cs | 52 ++++++ Ex8.Operators/Ex8.Operators.csproj | 10 + Ex8.Operators/Program.cs | 37 ++++ Ex9.Condition/Ex9.Condition.csproj | 10 + Ex9.Condition/Program.cs | 70 +++++++ ExA.Loop/ExA.Loop.csproj | 10 + ExA.Loop/Program.cs | 73 ++++++++ ExB.Yield/ExB.Yield.csproj | 10 + ExB.Yield/Program.cs | 50 +++++ ExC.Exception/ExC.Exception.csproj | 10 + ExC.Exception/Program.cs | 64 +++++++ ExD.NameSpace/ExD.NameSpace.csproj | 10 + ExD.NameSpace/Program.cs | 21 +++ ExE.Struct/ExE.Struct.csproj | 10 + ExE.Struct/Program.cs | 45 +++++ ExF.Class/ExF.Class.csproj | 10 + ExF.Class/MyCustomer.cs | 56 ++++++ ExF.Class/Program.cs | 13 ++ ExG.Nullable/ExG.Nullable.csproj | 10 + ExG.Nullable/Program.cs | 43 +++++ ExH.Parameters/ExH.Parameters.csproj | 10 + ExH.Parameters/Program.cs | 65 +++++++ ExI.Event/ExI.Event.csproj | 10 + ExI.Event/MyClass.cs | 19 ++ ExI.Event/Program.cs | 12 ++ ExJ.Preprocessor/ExJ.Preprocessor.csproj | 10 + ExJ.Preprocessor/Program.cs | 76 ++++++++ ExK.Indexer/ExK.Indexer.csproj | 10 + ExK.Indexer/Program.cs | 47 +++++ ExL.AccessModifier/ExL.AccessModifier.csproj | 10 + ExL.AccessModifier/Program.cs | 24 +++ ExM.Inheritance/ExM.Inheritance.csproj | 10 + ExM.Inheritance/Program.cs | 113 +++++++++++ ExN.Static/ExN.Static.csproj | 10 + ExN.Static/Program.cs | 61 ++++++ ExO.Generic/ExO.Generic.csproj | 10 + ExO.Generic/Program.cs | 58 ++++++ ExP.Interface/ExP.Interface.csproj | 10 + ExP.Interface/Program.cs | 35 ++++ ExQ.Delegate1/ExQ.Delegate1.csproj | 10 + ExQ.Delegate1/Program.cs | 34 ++++ Ojt.Lectures.sln | 175 ++++++++++++++++++ 55 files changed, 1716 insertions(+) create mode 100644 Ex1.HelloWorld/Ex1.HelloWorld.csproj create mode 100644 Ex1.HelloWorld/Program.cs create mode 100644 Ex2.Comment/Ex2.Comment.csproj create mode 100644 Ex2.Comment/Program.cs create mode 100644 Ex3.DataType/Ex3.DataType.csproj create mode 100644 Ex3.DataType/Program.cs create mode 100644 Ex4.VariableConstant/Ex4.VariableConstant.csproj create mode 100644 Ex4.VariableConstant/Program.cs create mode 100644 Ex5.Array/Ex5.Array.csproj create mode 100644 Ex5.Array/Program.cs create mode 100644 Ex6.String/Ex6.String.csproj create mode 100644 Ex6.String/Program.cs create mode 100644 Ex7.Enum/Ex7.Enum.csproj create mode 100644 Ex7.Enum/Program.cs create mode 100644 Ex8.Operators/Ex8.Operators.csproj create mode 100644 Ex8.Operators/Program.cs create mode 100644 Ex9.Condition/Ex9.Condition.csproj create mode 100644 Ex9.Condition/Program.cs create mode 100644 ExA.Loop/ExA.Loop.csproj create mode 100644 ExA.Loop/Program.cs create mode 100644 ExB.Yield/ExB.Yield.csproj create mode 100644 ExB.Yield/Program.cs create mode 100644 ExC.Exception/ExC.Exception.csproj create mode 100644 ExC.Exception/Program.cs create mode 100644 ExD.NameSpace/ExD.NameSpace.csproj create mode 100644 ExD.NameSpace/Program.cs create mode 100644 ExE.Struct/ExE.Struct.csproj create mode 100644 ExE.Struct/Program.cs create mode 100644 ExF.Class/ExF.Class.csproj create mode 100644 ExF.Class/MyCustomer.cs create mode 100644 ExF.Class/Program.cs create mode 100644 ExG.Nullable/ExG.Nullable.csproj create mode 100644 ExG.Nullable/Program.cs create mode 100644 ExH.Parameters/ExH.Parameters.csproj create mode 100644 ExH.Parameters/Program.cs create mode 100644 ExI.Event/ExI.Event.csproj create mode 100644 ExI.Event/MyClass.cs create mode 100644 ExI.Event/Program.cs create mode 100644 ExJ.Preprocessor/ExJ.Preprocessor.csproj create mode 100644 ExJ.Preprocessor/Program.cs create mode 100644 ExK.Indexer/ExK.Indexer.csproj create mode 100644 ExK.Indexer/Program.cs create mode 100644 ExL.AccessModifier/ExL.AccessModifier.csproj create mode 100644 ExL.AccessModifier/Program.cs create mode 100644 ExM.Inheritance/ExM.Inheritance.csproj create mode 100644 ExM.Inheritance/Program.cs create mode 100644 ExN.Static/ExN.Static.csproj create mode 100644 ExN.Static/Program.cs create mode 100644 ExO.Generic/ExO.Generic.csproj create mode 100644 ExO.Generic/Program.cs create mode 100644 ExP.Interface/ExP.Interface.csproj create mode 100644 ExP.Interface/Program.cs create mode 100644 ExQ.Delegate1/ExQ.Delegate1.csproj create mode 100644 ExQ.Delegate1/Program.cs create mode 100644 Ojt.Lectures.sln 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