728x90

정리가 필요한 카테고리(추후 정리) 58

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#] 부분 형식, 부분 메서드

부분 형식(partial type)과 부분 메서드(partial method) - 부분 형식 하나의 형식을 여러 곳에서 나누어 정의하는 것하나의 형식이 여러 소스 파일에서 정의되는 경우도 흔함.부분 클래스의 흔한 용도 하나는 다른 어떤 출처에서 자동으로 생성한 클래스를 사람이 직접 추가해 보강하는 것한 형식의 모든 부분 선언에는 반드시 partial 키워드가 있어야 함. AGen.cs - 자동 생성 partial class A { ... } A.cs - 사람이 직접 생성 partial class a {...} 매개변수가 동일한 생성자가 여러 개의 부분 선언에 포함되어 있는 경우처럼 멤버들이 충돌해선 안 됨.부분 형식은 전적으로 컴파일러가 처리해,모든 부분 선언이 갖추어져야 하며, 반드시 어셈블리 안에 있..

C#] nameof

nameof 연산자 C# 6.0에 추가된 개념임의의 기호(형식, 멤버, 변수 등)의 이름에 해당하는 문자열을 돌려줌.그냥 해당 문자열을 직접 지정하는 것에 비해, 정적 형식 점검이 일어난다는 장점이 있음.Visual Studio 같은 툴들은 기호 참조를 이해할 수 있어,해당 기호의 이름을 바꾸면 그에 대한 모든 참조의 이름도 바뀜. 필드나 속성 같은 형식 멤버의 이름을 얻으려면 그것이 속한 형식의 이름도 지정해야 함.이는 정적 멤버, 인스턴스 멤버 모두 마찬가지임. string name = nameof (StringBuilder.Length); name에는 "Length"가 배정되며, "StringBuilder.Length"를 원하는 경우 아래와 같이 사용한다. nameof(StringBuilder) +..

C#] 상수(Constant)

상수 필드(constant field) 값을 결코 바꿀 수 없는 정적 필드컴파일 시점에서 정적으로 평가되며, 컴파일러는 상수가 쓰이는 곳마다 그 값을 직접 삽입하며,이는 C++의 매크로와 상당히 유사한 면을 띔.타입으로는 내장 수치 타입들과, bool, char, string, 열거형을 사용 가능상수 선언 시, const 키워드를 반드시 써줘야 하며, 초기치도 반드시 지정해야 함. 메서드에 국한된 지역 상수 사용을 가능하게 함.지역 상수가 아닌 상수의 경우 다음과 같은 수정자들을 적용할 수 있음.public internal private protected, new 사용할 수 있는 형식 면에서나 필드 초기화 방식에서나, static readonly 필드보다 훨씬 제한적임.컴파일 시점에서 평가된다는 점 역시..

C#] 인덱서(Indexer)

인덱서(Indexer) 인덱서는 값들의 목록이나 사전을 캡슐화하는 클래스나 구조체에서 특정값에 자연스러운 구문으로 접근하기 위한 기능을 제공하는 멤버Property와 유사하나, 이름이 아니라 색인 변수를 통해 접근함인덱서를 사용하는 구문은 배열 사용 구문과 유사하나, 정수 이외 형식도 색인으로 사용 가능적용할 수 있는 수정자는 property의 것들과 동일함 string 클래스에는 문자열을 구성하는 특정 문자의 char 값에 int 색인을 통해서만 접근할 수 있게 하는 인덱서가 존재 class IndexerText { string[] test = "This is Text Code".Split(); public string this [int wordNum] // Indexer { get { return w..

C#] 속성(Property

속성(Property) 겉으로 보기에는 필드 같으나 내부적으로는 메서드처럼 논리 코드를 가진 멤버아래 코드만 봐서는 필드인지 속성인지 구별이 불가능함 Stock msft = new Stock(); msft.CurrentPrice=30; msft.CurrentPrice-=3; Console.WriteLine(msft.CurrentPrice); 만일 여기서 CurrentPrice가 속성일 때 구현 예시는 아래와 같다. public class Stock { decimal currentPrice; // 전용 필드 public decimal CurrentPrice // 공용 속성 { get { return currentPrice; } set { currentPrice=value; } } } 속성도 필드처럼 그 형..

C#] 인스턴스 생성자

인스턴스 생성자 클래스나 구조체의 인스턴스를 초기화하는 함수 멤버생성자의 정의는 메서드와 유사하나, 메서드 이름과 반환 형식이 생성자가 속한 형식의 이름을 따름 - 인스턴스 생성자에 적용할 수 있는 수정자 접근 수정자public internal private protected비관리 코드 수정자unsafe extern - 중복적재 중복적재한 경우 this 키워드를 이용해 다른 생성자를 호출해 중복을 피함한 생성자가 다른 생성자를 호출할 경우, 호출된 생성자가 선행적으로 실행됨. 다른 생성자에 표현식을 넘겨주는 것도 가능하나,this를 통해 어떤 인스턴스 메서드를 호출할 수 없기 때문에표현식 자체에서 this 참조는 사용할 수 없음.정적 메서드는 호출이 가능함. 해당 제약은, 생성자의 현재 단계에서 객체가 ..

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으로 간주됨...

C#] using static 지시자

C# 6.0에서부터는 namespace가 아니라 특정 형식을 using static 지시자를 이용해 도입 가능 그렇게 사용하면, 해당 형식의 모든 정적 멤버가 도입되어, 그 후부터 그 멤버의 형식 이름을 지정하지 않고 사용이 가능해짐. using static System.Console; class Test { static void Main() { WriteLine("Hello!"); } } using static 지시자는 주어진 형식의 모든 접근 가능한 정적 멤버를 도입하기 때문에, 정적 메서드만이 아니라 정적 필드, 속성, 내포된 형식도 도입함. 열거형에 대해서도 이 지시자를 적용할 수 있으며, 열거형의 모든 멤버가 도입됨. 따라서, using static System.Windows.Visibility..

728x90