일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- c#
- 포인터
- tipssoft
- 백준
- doit코틀린프로그래밍
- c++
- 연산자
- Desktop
- Windows
- Tips프로그래밍강좌
- VS ERROR
- 김성엽
- 문법
- 함수
- Direct2D
- 프로그래밍
- Kotlin
- CS
- 이지스퍼블리싱
- 리뷰
- 지식나눔강좌
- 배열
- 알고리즘
- Tips강좌
- Win32
- Visual Studio
- 티스토리
- c
- Programming
- Javascript
- Yesterday
- Today
- Total
목록c# (15)
F.R.I.D.A.Y.
레지스트리 시작 프로그램에 관리자 권한 프로그램 등록 시 발생하는 문제 해결하기 시작 프로그램 Windows 시작 프로그램은 개발자 입장에서 상당히 매력적인 기능일 것이다. 내 프로그램이 OS 시작과 함께 돌아간다고? 사용하는 시간이 늘어나는 것이나 마찬가지니... 가장 간단한 등록 방법은 Startup 폴더에 해당 프로그램을 넣어두는 것이다. 바로가기도 아마 실행이 될것인데, 개발할 때는 주로 Startup 폴더에 넣는 것보다 선호되는 방법이 있으니, 아무래도 레지스트리 등록일 것이다. .Net 차원에서도 Reg Key에 접근/수정하는 기능을 제공하니 편하기도 편하고.. 그러나, 이러한 편의를 받는 프로그램은 일반 프로그램에 한정한다. 필요 권한이 requiredAdministrator 미만(asInv..
metroUI는 Microsoft에서 개발한 UI 프레임워크로, Windows 8부터 시작한 타일 디자인의 .NET 버전이라고 볼 수 있겠다. UI metroUI의 기본 구성은 아래와 같다. 각종 타일 버튼부터 과거부터 내려온 컨트롤의 외형을 모두 벗겨내고, 좀더 현대적인 디자인을 가지고 있다. 이중 궁금한 것은 이 UI가 어떤식으로 구성되어있느냐는 점이었다.[# 직접 컨트롤 디자인 하고 싶었으니까!] 하루 동안의 분석결과를 보자면, MetroForm은 Form의 상속체로서 FormBorderStyle을 None으로 두고, 상단 최대/최소 버튼 및 닫기 버튼을 포함한 모든 디자인을 Client 영역 안에 그려놓은 것이다. Caption의 처리 더 궁금한 부분은 Window의 이동 작업이었다. 대개 C# ..
C#에서 네이티브 코드인 WinAPI를 이용해 무언가를 작성하려 할 때, 꼭 주의해야 할 점이 있다. 관리되는 코드 C#은 C/C++처럼 기계어로 컴파일되는 것이 아닌 .NET 혹은 .Net Framework에서 작동하는 바이트코드, CRL(Common Runtime Language)로 변경된다. C/C++과 C#의 가장 큰 차이를 고르라면 아마도 메모리를 사용자(개발자)가 직접 관리하는가에 대한 여부일 것이다. 여태 알듯 C/C++은 개발자가 객체의 메모리 관리를 직접 해야 하는 것과 달리, C#의 경우 언어 사용자가 직접 메모리 관리를 할 필요가 없다. 내부적으로 GC(Garbage Collector)가 돌아가면서 사용되지 않는 메모리를 제거하는 방식으로 누수 메모리를 자동으로 잡는다. 이렇게 .NE..
코드에서 메서드를 지웠는데 갑자기 오류가 난다. WinForm으로 작업을 하다가 실수로 Form을 눌러서 메서드가 나와서, 필요 없는 메서드를 지웠더니 위 이미지처럼 오류가 발생했다. 원인 디자이너 코드와 실제 메서드 코드가 상이하기 때문에 발생하는 문제다. WinForm은 디자이너라는 시스템으로 코드 및 UI 관리가 이루어진다. WinForm 디자이너는 개발자의 편한 프로그래밍을 위해 만들어졌지만, 일단은 프로그램이라서 사람처럼 '알아서'가 안된다. CS 파일과 UI 및 이벤트 바인딩[# 컨트롤과 메서드 연결]을 위한 Designer파일이 분리되어있기 때문에 사용자가 직접 메서드만 삭제를 하면 Designer 파일과 CS 파일이 서로 충돌이 발생하면서 위와 같은 문제를 일으킨다. 해결 위 문제를 해결할..
메서드, 필드, 클래스의 사용 범위를 지정할 수 있는 접근제한자 접근제한의 필요 굳이 멀리 가지 않더라도, 우리 집에 다른 사람이 무단으로 침입한다고 하면 불쾌할 것이다. 프로그램에서도 외부에서 접근하면 기능에 이상이 생기거나 잠재적인 오류를 만들 위협이 있을 때, 혹은 구태여 외부에 노출할 필요가 없을 때 접근을 차단할 필요가 있다. 이런 이유로 여러 언어에서 접근제한자를 두어 필요에 따라 사용할 수 있도록 했다. 접근제한자 종류 C#에서는 총 다섯 개의 접근제한자가 존재한다. public protected private internal protected internal 이중, internal과 protected internal은 외부 어셈블리와 관련된 접근제한자로 따로 다룬다. public 의미대로 ..
여러 타입으로 구성된 C#의 연산자 오버로딩 연산자 프로그램에서의 연산자는 우리가 생각하는 일반적인 사칙연산자를 포함해 다양한 연산자가 존재한다. C#에서는 다음 항목의 연산자가 제공되고 일부는 개발자가 상황에 맞춰 기능을 구성할 수 있도록 연산자 오버로딩을 제공한다. 단항 연산자 이항 연산자 인덱서 더보기 # 오버로드 불가능한 연산자 타입캐스팅 연산자나 복합 대입 연산자 등은 오버로드가 불가능하다. 기존의 연산자는 불가능하지만, 타입캐스팅 연산자는 사용자 정의 자료형에 대해 캐스팅 연산을 생성할 수 있고, 복합 대입 연산자의 경우 연관된 이항 연산자를 오버로딩 하는 것으로 암시적으로 오버로드 할 수 있다고 한다. https://docs.microsoft.com/ko-kr/dotnet/csharp/lan..
구조체와 클래스 데이터 전달 방식 구조체와 클래스를 배우기 위해선 필수적으로 사전에 알아야하는 것이 있다. 함수로 인수를 넘길 때 값으로 넘기는지 레퍼런스로 넘기는지이다. 값의 전달은 말 그대로 값을 복사해 전달하는 개념이다. A를 복사해 B를 만들었다. B에 영향을 주었을 때 A는 영향을 받지 않는다. 정도가 되겠다. static void valTest(int a) { System.Console.WriteLine(a); a = 5; System.Console.WriteLine(a); } static void refTest(ref int b) { System.Console.WriteLine(b); b = 5; System.Console.WriteLine(b); } static void Main(strin..
지역을 정해주는 개념으로, 혹은 이름 중복을 해결하기 위한 수단으로 보면 될 것 같다 이름 중복 프로그램 규모가 커지면 커질수록 소스코드에서 변수를 사용하는 규모도 함께 커진다. 단순히 변수의 규모만 커지는 것도 아니고 함수, 클래스 등 온갖 내용이 함께 나오니 점점 프로그램에서 사용할 수 있는 이름도 줄어들게 된다.[# 이미 사용된 이름은 사용할 수가 없으니까] 이 문제를 해결하기 위해선 각각의 이름을 구분지을 수 있는 방법이 있어야 한다. 여러 식당에서 같은 메뉴를 판매 하더라도 식당 이름이 다르면 사람들이 구분을 지을 수 있듯이, C#에서도 구분을 짓는데 도움이 되는 문법이 있다. 이름하여 namespace(네임스페이스)다. 네임스페이스 네임스페이스는 당장에 콘솔 프로그램을 작성할 때도 나오는데, ..
오류 발생에 대비하기 위한 예외 처리 구문 예외 처리 임의의 수를 0으로 나누면 devided by zero라는 오류를 내면서 프로그램이 터져버린다. 가장 간단한 오류 타입이기 때문에 if 구문으로 처리하는 편이 낫지만 통제할 수 없는 경우, 혹은 외부 요인에 의한 오류라면 try-catch-finally 구문을 이용해 처리한다. try-catch 대개 분기문 등을 이용해 오류가 나지 않도록 프로그램 내에서 처리를 하지만, 경우에 따라선 분기문 처리를 하지 못하기도, 처리되지 않은 문제가 있을 수도 있다. 때문에 예외 처리 문법이 존재하는데, 대표적으로 try-catch 구문이 있다. 이 구문은 크게 세 구역으로 나뉜다. try{ // commands } catch(Exception ex){ } fina..
for, foreach, while, do-while. C++과는 달리 기본적으로 foreach를 문법 차원에서 제공한다. for 반복문 for 반복문 사용법은 C++과 동일하다 for(int i = 0; i < 10; ++i){ // commands } 대개 횟수가 정해진 경우에 사용하는 반복문. foreach C++과는 달리 항목의 수에 맞게 하나씩 값을 뽑아서 사용할 수 있도록 만들어져 있다. 약간 C++의 이터레이터와 비슷하다. int[] arr = {1,2,3,4,5,6,7}; for(int val in arr){ System.Console.WriteLine("{0}", val); } 이 방식의 이점은, for 구문으로 작성할 때와는 달리 코드 자체가 굉장히 간편하다는 점이다. 단적인 예로 다중..