C# 문법

C#/Language

C# - Language - Bitwise and shift operators (~, &, |, ^, <<, >>, >>>)

Introduction Bitwise 및 shift 연산자는 피연산자에 대해 비트 연산을 수행하게 한다. 정수 형식 또는 문자형 (char)에 대해 비트 연산 수행이 가능하다. 정수 형식은 int, uint, long, ulong 형식으로 정의된다. 피연산자가 다른 정수 형식인 (int보다 작은 데이터형) 경우 연산 결과는 int 형식으로 변환된다. 피연산자의 형식이 다른 경우 값을 포함할 수 있는 가장 가까운 형식으로 변환된다. 복합 할당 식의 결과 형식은 왼쪽 피연산자의 형식이다. 비트 연산자 Complement (~) ~ 연산자는 피연산자의 각 비트를 뒤집어 비트 보수를 반환한다. int A = 0b_1010_1011; int B = ~A; Console.WriteLine(Convert.ToStri..

C#/Language

C# - Language - Logical operators (!, &, |, ^, &&, ||)

Introduction 논리 연산자는 단항 및 이진 논리 연산을 포함한다. NOT : ! AND : & OR : | XOR : ^ Conditional AND : && 왼쪽 피연산자가 true일 때만 오른쪽 피연산자를 평가 Conditional OR : || 왼쪽 피연산자가 false일 때만 오른쪽 피연산자를 평가 NOT (!) 단항 논리 연산자 !는 피연산자의 부정을 반환한다. 접두사로 사용하며, 접미사로 사용하는 경우 null 허용 연산자가 된다. Console.WriteLine(!true); Console.WriteLine(!false); /* output: False True */ AND (&) & 연산자는 AND 연산을 수행한다. 왼쪽과 오른쪽 피연산자 둘 다 true의 값을 가질 때만 true..

C#/Language

C# - Language - +, - operator (Arithmetic operator)

Introduction 산술 연산자 중 +, - 연산자는 정수, 부동 소수점 형식을 지원한다. 정수 형식은 int, uint, long, ulong 형식으로 정의된다. (++, -- 제외) 피연산자가 다른 정수 형식인 (int보다 작은 데이터형) 경우 연산 결과는 int 형식으로 변환된다. 피연산자가 정수 또는 부동 소수점 형식인 경우 값을 포함할 수 있는 가장 가까운 형식으로 변환된다. ++, -- 연산자는 모든 숫자 형식과 char 형식에 사용 가능하다. 복합 할당 식의 결과 형식은 왼쪽 피연산자의 형식이다. 이진 연산 + 연산자는 피연산자의 합계를 계산한다. - 연산자는 왼쪽 피연산자에서 오른쪽 피연산자를 뺀다. Console.WriteLine(1 + 2); Console.WriteLine(3 - ..

C#/Language

C# - Language - Yield keyword (For, foreach 문)

Introduction yield 키워드는 iterator (for 문, foreach 문) 의 다음 값을 리턴하거나 끝을 알리는 데 사용한다. yield return : 값을 리턴한다. yield break : 반복의 끝을 알린다. yield 키워드를 사용하려는 경우, 메서드는 다음 형식 중 하나를 리턴해야 한다. IEnumerable IEnumerable IAsyncEnumerable IEnumerator IEnumerator IAsyncEnumerator yield 키워드는 다음 식 또는 메서드에서 사용이 불가능하다. in, ref, out 매개 변수 한정자가 사용된 메서드 람다 식, 익명 메서드 unsafe 한정자를 사용하는 메서드 Example public class CartesianCoordi..

C#/Language

C# - Language - When keyword (Catch, switch 문)

Introduction when 키워드는 필터 조건을 지정하는 데 사용한다. catch 절의 예외 필터 switch 문의 케이스 가드 switch 식의 케이스 가드 when 키워드는 아래와 같이 사용한다. // catch public class Foo { public static void RaiseException() { throw new NotImplementedException("My exception"); } } private static void Main() { try { Foo.RaiseException(); } catch (Exception e) when (e is NotImplementedException) { Console.WriteLine($"Exception has been occurr..

C#/Language

C# - Language - Partial keyword (Type, method)

Introduction partial 키워드는 정의를 나눌 수 있게 해주며 다음 형식 또는 멤버에 사용 가능하다. 클래스 구조체 인터페이스 레코드 메서드 partial을 이용하여 형식을 정의하는 경우는 다음과 같다. 소스 생성기 (Community toolkit, Visual studio designer, ...) 를 사용하는 경우 형식을 개별 파일에 분산하여 정의하는 경우 partial 키워드는 용도에 따라 코드 파일을 분리할 수 있는 이점을 제공한다. 그러나 키워드의 편의성으로 인해 과도하게 형식이 커질 수 있다. 해당 부분은 코드 작성 시 주의해야 한다. partial로 선언된 형식은 하나의 어셈블리 내에서 정의되어야 하며, 모든 선언이 동일하게 partial 키워드를 갖고 있어야 한다. parti..

C#/Language

C# - Language - Get, value, set, init keywords (Property, indexer)

Introduction get, set, init는 속성 (property), 인덱서(indexer)의 액세스 메서드를 정의하는 키워드이다. value는 속성 및 인덱서의 설정자 (setter) 에 사용하는 키워드이다. get get은 접근자 (getter) 의 액세스 메서드를 정의하는 키워드이다. 일반적으로 get은 특정 값을 반환하는 데 주로 사용한다. public class Foo { public List X = new() { 1, 2, 3 }; public int CenterX { get => X[1]; } public int this[int index] { get => X[index]; } } internal class Program { private static void Main() { Foo..

C#/Language

C# - Language - Add, remove (Event)

Introduction add, remove 키워드는 event 접근자를 정의하는 데 사용한다. add, remove 키워드는 항상 쌍으로 정의되어야 한다. 일반적으로는 컴파일러가 제공하는 접근자로 충분하다. 다음과 같은 경우에는 직접 접근자를 제공해야 할 수 있다. 동일한 이름을 가진 여러 인터페이스의 이벤트 하나의 이벤트를 통해 여러 이벤트를 발생시키는 경우 ... Example private class Foo { private event EventHandler? PreEvent; private event EventHandler? PostEvent; private object _lock = new(); public event EventHandler OnEvent { add { lock (_lock) ..

C#/Language

C# - Language - Out keyword (Parameter modifier)

Introduction out 키워드는 쓰기 전용 참조 매개 변수를 의미한다. 메서드에 전달되기 전 할당은 선택사항이며, 선언된 out 파라미터는 리턴 전 값을 할당해야 한다. in 키워드와 달리, out 키워드는 호출 시 반드시 입력해야 한다. out 키워드를 사용하여 여러 값을 반환할 수 있다. 대안으로 튜플 형식 (System.ValueTuple)을 사용할 수도 있다. 다음 요소가 포함된 메서드에는 in, ref, out 키워드 사용이 불가능하다. async yield return, yield break 확장 메서드에는 다음과 같은 제약이 있다. 첫 번째 인수에는 out 키워드 사용 불가 Example public static void Foo(out int value) { value = 10; } ..

C#/Language

C# - Language - In keyword (Parameter modifier)

Introduction in 키워드는 읽기 전용 참조 매개 변수를 의미한다. 메서드에 전달되기 전 초기화가 필요하다. 읽기 전용 매개 변수가 되기 때문에 호출된 메서드 내부에서는 쓰기가 불가능하다. 참조 매개 변수로 전달되므로, 큰 크기의 값 형식 데이터를 넘기는 데 활용할 수 있다. 메서드 선언 시 in 키워드를 지정하지만, 호출 사이트에서는 일부러 키워드를 넣을 필요는 없다. in 키워드가 없는 메서드가 있는 경우에는 키워드를 넣어주어야 한다. 다음 요소가 포함된 메서드에는 in, ref, out 키워드 사용이 불가능하다. async yield return, yield break 확장 메서드에는 다음과 같은 제약이 있다. 첫 번째 인수가 구조체일 때만 사용 가능 첫 번째 인수가 제네릭인 경우 사용 불..

C#/Language

C# - Language - Params keyword (Parameter modifier)

Introduction params 키워드는 배열 형태의 인수를 지정한다. 여기서 배열은 1차원 배열이어야 한다. params 키워드 설정 시, 다른 매개 변수는 허용되지 않는다. Example public static void ParamsInt(params int[] args) { Console.WriteLine(String.Join(", ", args)); } public static void ParamsString(params string[] args) { Console.WriteLine(String.Join(", ", args)); } public static void ParamsObject(params object[] args) { Console.WriteLine(String.Join(", ",..

C#/Language

C# - Language - Method parameter

Introduction C#의 형식에는 참조(class), 값(struct) 형식이 있고 이를 메서드 매개 변수로 전달할 수 있다. 참조 형식은 변수에 대한 참조의 복사본을 전달한다. 값 형식은 변수의 복사본을 전달한다. 매개 변수를 선언할 때 사용 가능한 키워드는 아래와 같다. params : 인수의 수가 가변인 것을 지정한다. in : 매개 변수를 참조로 전달, 호출된 메서드에서 읽기 가능 ref : 매개 변수를 참조로 전달, 호출된 메서드에서 읽기 / 쓰기 가능 out : 매개 변수를 참조로 전달, 호출된 메서드에서 쓰기 가능 Example class Foo { public int Integer; } struct Bar { public int Integer; } static void ChangeVa..

Peponi_
'C# 문법' 태그의 글 목록