keyword

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 - Ref keyword (Parameter modifier)

Introduction ref 키워드는 참조 매개 변수를 의미한다. in 키워드와 마찬가지로 메서드에 전달되기 전 초기화가 필요하다. ref 키워드를 통해 넘겨진 매개 변수는 호출된 메서드에서 읽기 / 쓰기가 가능하다. ref 매개 변수는 메서드 정의와 호출 모두 명시적으로 사용해야 한다. 다음 요소가 포함된 메서드에는 in, ref, out 키워드 사용이 불가능하다. async yield return, yield break 확장 메서드에는 다음과 같은 제약이 있다. 첫 번째 인수가 ref struct가 아니거나 구조체로 제한되지 않은 제네릭 형식인 경우 사용 불가 ref readonly 키워드를 통해 읽기 전용으로 참조를 전달할 수 있다 (C# 12) Example // 값 형식 struct Test ..

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 - This keyword

Introduction this 키워드는 현재 인스턴스를 가리킨다. 이를 통해 변수와 인스턴스를 분명하게 할 수 있다. static 메서드에서는 사용할 수 없다. 확장 메서드의 변수 한정자로도 사용된다. Example public class Foo { List bar; // 변수와 인스턴스 구분 public Foo(List bar) => this.bar = bar; // 인덱서 선언 public string this[int index] => bar[index]; // 인스턴스를 변수로 전달 public void MethodA() => MethodB(this); void MethodB(Foo foo) => Console.WriteLine(foo); } 확장 메서드 한정자 this 키워드는 확장 메서드의 한..

C#/Language

C# - Language - Base keyword

Introduction base 키워드는 상속받은 클래스의 멤버에 액세스하는 데 사용한다. 상속받은 클래스의 생성자, 메서드, 인스턴스 속성 호출이 가능하다. static method에서는 상속받은 클래스 호출이 불가능하다. Example // Base class public class Base { public virtual bool Property { get; set; } = false; public Base(bool property) { Property = property; Console.WriteLine($"Base ctor - {Property}"); } public virtual void Method() => Console.WriteLine("Base Method"); } // Derived c..

C#/Language

C# - Language - Literal keywords (null, default, bool)

null null 키워드는 참조 형식의 기본값이다. null reference를 나타내는 키워드로, 어느 객체도 참조하지 않고 있음을 나타낸다. 값 형식은 null 허용 값 형식을 제외하고 null을 가질 수 없다. Example string a = null; Console.WriteLine(a); a = "A"; Console.WriteLine(a); // int b = null; // CS0037 int? b = null; Console.WriteLine(b); b = 10; Console.WriteLine(b); /* output: A 10 */ default default 키워드는 기본값또는 형식 제약 조건을 나타내는 데 사용한다. Example - 기본값 // 기본값 Console.WriteLi..

Peponi_
'keyword' 태그의 글 목록