728x90
728x90

csharp 12

C#] Dispose 호출해야 하는 경우와 그렇지 않아야 하는 경우

Dispose를 호출해야 하는 경우 '의심 스럽다면 처분 하는 원칙'에 따름. Windows Forms의 컨트롤들, 파일 및 네트워크 스트림, 네트워크 소켓, GDI+의 펜/브러시/비트맵 등이 이에 해당. Dispose를 호출하지 말아야 하는 경우 현재 코드가 객체를 소유한 것이 아니고, 정적 필드나 속성을 통해 공유 객체를 얻은 경우 System.Drawing namespace의 형식에서 정적 필드 및 속성을 통해 얻은 GDI+ 객체 - 응용 프로그램 종료 시점까지 사용 Dispose 메서드가 현재 상황에 맞지 않는 경우 System.IO namespace와 System.Data namespace의 형식들 MemoryStream - 차후 스트림을 다시 쓰는 경우 StreamReader, StreamWr..

C#] 접근 수정자(Acces Modifier)

캡슐화를 강화하는 목적으로 형식이나 형식의 멤버의 접근성(accessibility)을 설정할 수 있으며, 그 형식이나 멤버에 다른 어떤 형식이나 어셈블리가 접근할 수 있는지 결정함.접근성을 설정하기 위해 형식이나 멤버 선언 시 적용하는 다섯 가지 접근자가 존재함. - public모든 형식과 어셈블리가 접근 가능한 공용.열거형이나 인터페이스의 모든 멤버에는 암묵적으로 이 수준이 적용됨. - internal형식이 속한 어셈블리나 그 어셈블리와 friend 관계인 어셈블리에서만 접근 가능함.비내포 형식(non-nested type; 다른 형식에 내포된 것이 아닌 형식)의 기본 접근성 - private멤버가 속한 형식 안에서만 접근 가능한 전용.이는 클래스나 구조체 멤버들의 기본 접근성. - protected멤..

C#] 버튼 텍스트 바꾸기

C#] 버튼 텍스트 바꾸기 버튼에 별도의 이미지를 적용하는 경우는 다른 케이스지만,간단히 버튼을 생성하고 속성 Text 내용만 변경해줘야 할 때가 있다. 이 프로그램은 TPWord로, 영단어 공부용으로 만들었다.(실제로는 영단어 공부가 되었는가에 대해서는...) 외우고자 하는 영단어 정보를 입력해두고미리 설정해둔 시간에 맞춰 영단어 뜻을 물어보는 그런 프로그램이다. 어느 때고 가리지 않고 나타나서,게임을 하다가도 나타나고, 과제를 하다가도 나타나서결국은 만든 의도랑 크게 벗어나 사용하고 있지는 않지만,이 프로그램에서 시작과 중단에 관한 버튼을 다음과 같이 사용했다. 나는 bool 타입의 변수를 별도로 선언해서버튼을 클릭 이벤트가 발생하면서 호출되는 함수에변수값을 토글하는 식으로 버튼 텍스트를 변경했는데별..

C#] System.Net 네임스페이스

### System.Net 네임스페이스 현재 네트워크에서 사용되는 여러 프로토콜에 대한 단순한 인터페이스 제공된다.DNS, IPAddress, IPHostEntry 클래스 등이 존재하며, 상당히 많은 클래스가 존재한다. ## DNS 클래스 단순 도메인 이름 확인 기능을 제공하는 클래스.특정 호스트의 정보를 인터넷 DNS에서 검색하는 정적 클래스이다.DNS 쿼리에서 검색한 호스트 정보는 IPHostEntry 클래스의 인스턴스에 반환된다.지정된 호스트의 DNS DB에 여러 항목이 있으면 IPHostEntry에 여러 IP 주소와 별칭을 포함한다. # GetHostName : 로컬 컴퓨터의 호스트 이름을 가져옴# GetHostAddress : 지정된 호스트의 IP 주소 반환함 ## IPAddress 클래스 컴퓨..

C#] 제네릭(Generic) - 2

### 제네릭 ## 파생 제네릭 형식도 제네릭이 아닌 클래스처럼 파생 가능.제네릭 클래스를 기반으로 삼아 파생 클래스 정의 시, 기반 클래스의 형식 매개변수를 열린 채로 남겨두는 것이 가능함. 12class Stack {}class SpecialStack : Stack {}cs 구체적 형식을 지정해 제네릭 형식 매개변수를 닫을 수도 있으며, 파생 형식에서 새로운 형식 매개변수를 도입할 수도 있음. 1234class IntStack : Stack {} class List {}class KeyedList : List {}cs 엄밀히 말해 한 파생 형식의 모든 형식 매개변수는 새로 도입된 것임. ## 자신을 참조하는 제네릭 형식 파생 형식이 기반 형식의 형식 매개변수를 닫을 때, 파생 형식 자신을 형식 인수로..

C#] Delegate(델리게이트, 대리자) - 1

### Delegate Delegate type은 그 형식의 인스턴스를 호출할 수 있는 종류의 메서드를 정의함.좀 더 구체적으로 이 형식은 그런 메서드의 반환 형식과 매개변수 형식들을 정의함.delegate는 전통적인 프로그래밍 언어에서의 callback과 유사한 측면이 있다. 일반적으로 이 callback은 C의 함수 포인터 같은 지연 호출 수단을 일컫는 용어로 쓰임. 반환 형식이 int, int 형식의 매개변수 하나를 받는 모든 메서드에 사용 가능한 delegate type 정의한 예. delegate int Transformer (int x); class Test { static void Main() { Transformer t = Square; int result = t(3); Console.Wr..

C#] 구조체(Structure)

### 구조체(Structure) 참조 형식이 클래스와는 달리 구조체는 값 형식임.구조체는 상속을 지원하지 않음.(System.ValueType을 암묵적으로 상속한다는 점은 제외)구조체는 클래스가 지원하는 요소 중,매개 변수가 없는 생성자, 필드 초기화, 종료자, 가상 멤버와 보호된 멤버를 제외한 모든 요소를 지원함. 구조체는 값 형식 의미론이 바람직한 경우에 적합하며, 일례로 커스텀 수치 형식이 있음.수치 형식에서는 배정 시 참조가 아니라 값을 복사하는 것이 더 자연스럽기 때문임.구조체는 값 형식이기 때문에, 인스턴스화 시 힙에 객체를 할당할 필요가 없어 한 형식의 인스턴스를 많이 생성하는 경우 구조체가 더 효율적일 수 있음. ## 구조체 생성 의미론 구조체에는 매개 변수 없는 생성자가 암묵적으로 존재..

C#] 제네릭(Generic) - 1

### 제네릭(Generic) 여러 형식들에서 재사용할 수 있는 코드를 작성하기 위한 메커니즘 중 하나로, 자리표(placehodler)에 해다하는 형식들을 담은 템플릿(template)을 통해 재사용성을 표현함.상속에 비해 형식 안전성이 증가하고 casting, boxing이 줄어듦. ## 형식 형식 매개변수(type parameter)들을 선언하여 사용하며, 이는 실제 형식들이 대신할 자리를 표시하는 자리표에 해당함.형식 매개변수는 관례적으로 T를 이용하며, 형식 매개변수가 여러 개인 경우, T로 시작하면서 명확히 구분할 수 있는 이름을 붙여 매개변수를 사용함.실제 형식은 형식 인수(type argument)라고 부름. ex) Stack 123456789101112public class Stack{ ..

C#] 열거형(Enum Type)

### 열거형(Enum Type) 일련의 수치 상수들에 이름을 붙일 수 있는 특별한 형식열거형의 각 멤버에는 바탕 정수값이 존재하며, 이는 기본적으로 int형이며, 선언 순서대로 0, 1, 2가 배정됨.int 외의 형식을 배정하는 것도 가능하며, 명시적으로 바탕 정수 값 외의 값을 배정하는 것도 가능함. 더 나아가, 컴파일러는 열거형의 일부 멤버들에만 명시적으로 값을 배정하는 것도 허용함.이 경우 배정되지 않은 열거형 멤버들에게는 가장 최근 명시적으로 배정된 값을 차례로 증가한 값들이 배정됨. ## 변환 enum 인스턴스를 그 바탕 정수값으로, 그 반대로 변환 가능함.두 경우 모두 명시적 캐스팅(casting)이 필요. public enum BorderSide : byte { Left = 1, Right..

C#] namespace 규칙

1. 범위 바깥 namespace에서 선언된 name은 안쪽의 namespace에서 name을 한정하지 않고 사용 가능함. namespace Outer { class ClassEx1 {} namespace Inner { class ClassEx2 : ClassEx1 {} } } namespace 계통 구조의 다른 가지에 있는 형식을 지칭하는 경우,부분적으로 한정된 name을 사용할 수 있음. namespace Outer { namespace InnerOne { class Base1 {} } namespace InnerTwo { class Base2 : InnerOne.Base1{} } } 2. 숨기기 안쪽 namespace와 바깥쪽 namespace에 같은 name이 있는 경우 안쪽 name으로 간주됨...

728x90