본문 바로가기

개발언어/C#191

[C#] 전처리기 #if 조건부 지시문(디버그/릴리즈) 사 프로그램 개발할떄 배포할때와 로컬에서 작업할때는 어느정도의 코드 차이가 있다 예를들어 배포할때는 로그인이 필요하지만 개발할때 계속 로긴할려면 졸 짜증이다 또는 서버아이피를 변경해야할때도 있다 이럴때 주석으로 막는 삽질안하고 지시문을 사용해서 간편하게 할수 있다. 초간단한 사용방법 위의 코드는 디버그 모드일땐 자동으로 로긴(GetServerLogin(); )호출 하고 배포일땐 로그인을 해야된다. Solution Configuation 상태에 따라 실행되지 않는 코드는 저렇게 회색으로 처리된다. 서버 아이피를 설정할떄도 변하다. * 대소문자 구분하네요 (DEBUG O Debug X ) 컴파일설정 하기 클릭~ Configuration Manager를 통해 Configuration를 변경 해주면된다. 또는 디버.. 2023. 5. 18.
[C#] 전처리기 지시문 종류 C# 전처리기 지시문 C# 전처리기 지시문 #if(C# 참조) #else(C# 참조) #elif(C# 참조) #endif(C# 참조) #define(C# 참조) #undef(C# 참조) #warning(C# 참조) #error(C# 참조) #line(C# 참조) #region(C# 참조) #endregion(C# 참조) #pragma(C# 참조) #pragma warning(C# 참조) #pragma checksum(C# 참조) 2023. 5. 18.
[C#] virtual 함수 의미 및 활용 virtual 함수란? 부모 클래스에서 virtual 키워드를 사용하여 함수를 만들면, 자식 클래스에서 이 함수를 재정의 할 수 있도록 허용하겠다는 의미입니다. 특징 - virtual 이 붙은 함수는 자식 클래스에서 재정의가 가능합니다. - 자식 클래스에서는 new 또는 override 키워드가 사용가능하다. - override는 재정의를 하겠다는 확장의 의미이고, new 는 기본 클래스를 숨기는 의미이다. - 자식클래스의 함수 시그니쳐가 동일해야 재정의가 가능하다. - 자식클래스의 함수는 base 키워드를 사용해 부모 클래스의 함수를 호출 할 수 있습니다. - abstract 와는 달리 자식클래스에서 구현은 선택이다. (구현 안하면 부모의 함수 사용) - static, abstract, private,.. 2023. 5. 17.
[C#] Const와 Readonly의 차이점 #2 const와 readonly 키워드 C#의 const 키워드는 변수를 상수로 만들며, readonly 키워드는 변수를 읽기 전용으로 만듭니다. 이 두 가지 키워드는 '값을 변경할 수 없다'라는 관점에서는 동일하게 보이지만, 미묘한 차이점이 존재하므로 혼란스러울 수 있습니다. 따라서 이번 포스팅에서 예제와 함께 const와 readonly 키워드의 차이점을 알아보겠습니다. MSDN에서 언급된 내용 상수는 프로그램 컴파일 시 정해진 불변 값이며 프로그램이 종료될 때까지 값을 변경할 수 없습니다. 읽기 전용 변수 역시 불변 값이지만 런타임에 정해지며, 마찬가지로 프로그램이 종료될 때까지 값을 변경할 수 없습니다. MSDN에서 언급된 위 내용을 머릿속에 넣어두고 const와 readonly 키워드에 대해 알아봅.. 2023. 5. 17.
[C#] Const와 Readonly의 차이점 #1 C# 에서 const 와 readonly는 상수형 타입입니다. 보다 자세히 말씀드린다면, const는 컴파일 타입의 상수이며, readonly는 런타임 상수입니다. const 컴파일 타입의 상수이다. (컴파일 시 const 변수의 값을 가져온다.) 내장자료형 (정수형, 실수형, Enum, String)에 대해서만 사용 할 수 있다. 변수 선언과 동시에 값을 할당 해야 한다. 메모리 할당 위치는 Stack Memory 이다. 단, static 선언을 하면 Heap Memory에 저장 가능하다. readonly 런타임 상수이다. (exe 또는 dll을 사용할 때 변수의 값을 가져온다.) 모든 자료형에 사용 할 수 있으며, 생성과 동시에 초기화 할 필요는 없다. 단, 생성자 단계에서 단 1번 할당을 통해 초기.. 2023. 5. 17.
[C#] 어떠한 경우에도 파일닫기 using, IDisposable 어떠한 경우에도 파일을 닫아야 한다면 IDisposable인터페이스와 using문을 사용하는것이 기본이다. using System; using System.IO; class CFile : IDisposable { private TextWriter writer = null; public void Create() { writer = File.CreateText("Sample.txt"); } public void Close() { Dispose(); } public void Write() { throw new ApplicationException("sample Exception"); } //무조건 실행됨 public void Dispose() { if(writer != null) writer.Close(); .. 2023. 5. 17.
[C#] 어떠한 경우에도 실행 using, IDisposable IDisposable이란 무엇인가!! ​ 일단 Dispose의 단어 의미는 제거하다, 처분하다 라는 뜻을 갖고 있다. ​ 여기에 가능하다는 의미인 able이 붙어 제거가능한, 사용후 버리게 되어있는, 일회용의 란 뜻! ​ ​ ​ C#에서 무엇을 사용하고 제거해야 할까? ​ 바로 메모리다. 메모리를 사용하고 다 썼으면 할당된 메모리를 끊어줘야 한다. ​ 그런데 C#은 Garbage Collector(가비지 컬렉터)를 가지고 있는데, 힙 메모리 영역에서 더이상 사용하지 않는 객체들을 소거하는 역할을 한다. 자동으로 소거하기 때문에 개발자는 소거하는 일 자체는 신경쓰지 않아도 된다. ​ 그런데 왜 Dispose가 필요할까? ​ 1. GC는 관리되지 않는 리소스들을 인식하지 못한다. 2. GC는 개발자가 동작을.. 2023. 5. 17.
[C#] Linq 정리하기 .. 2023. 5. 17.
[C#] Var와 다이나믹(Dynamic)에 대해서 이해하기 dynamic 변수에 숫자를 할당했다가 나중에 다시 문자열을 할당하는 것이 가능하다. object 타입과 dynamic 타입의 차이점은 object 타입은 구체적 타입의 속성과 메서드를 사용하기 전에 반드시 캐스팅을 통해 구체적 타입으로 변경 후에 사용해야 하는 반면, dynamic 타입은 캐스팅이 없이도 직접 실제 타입(underlying type)의 메서드와 속성을 사용할 수 있다는 점이다. // 1. dynamic은 중간에 형을 변환할 수 있다. dynamic v = 1; // System.Int32 출력 Console.WriteLine(v.GetType()); v = "abc"; // System.String 출력 Console.WriteLine(v.GetType()); // 2. dynamic은.. 2023. 5. 17.
[C#] Task.WhenAll() vs WhenAny() - WhenAll() Task들이 모두 종료된 후 await 반환 using System; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; namespace tstTst { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { label1.Text = "Before"; label2.Text = ""; var _ = MainAsync(); label1.Text = "After"; } public async Task MainA.. 2023. 5. 12.