no image
[C#] Delegate, EventHandler 그리고 구조에 대한 고민
Delegate델리게이트는 특정 매개변수와 반환 타입을 가진 메서드에 대한 "참조"를 나타내는 타입이다. 델리게이트를 인스턴스화하면, 호완가능한 시그니처와 반환 타입을 가진 모든 메소드와 연결할 수 있다. 또한 델리게이트의 인스턴스를 통해 메소드를 호출할 수 있다. 개발을 할 때 "메서드 자체를 파라미터로 전달할 수 있을까?" 라는 의문을 해결하는데는 델리게이트가 적격이다. 메서드에 대한 참조를 델리게이트로 래핑한 뒤, 메서드를 다른 메서드의 파라미터로 전달하는데 사용할 수 있다.  델리게이트 타입의 선언그럼 델리게이트 타입은 어떻게 선언할 수 있을까?public delegate void CustomCallback(string s);`접근한정자` `delegate` `반환 형식` `delegate타입 이..
2024.12.06
C#
no image
[C#] 제너릭 메소드
제너릭 메소드제너릭 메소드는 이처럼 형식 매개 변수를 사용하여 선언된 메소드이다.static void Swap(T lhs, ref T rhs){ T temp; temp = lhs; lhs = rhs; rhs = temp;}위처럼 선언을 하지않고, 메소드 이름 옆에 를 제거하면 오류가 발생하는 것을 볼 수 있다. 사실 가 없어도 바로 쓸 수 있을 것이라 생각하였는데, 그렇지 않았다. 형식 인수 int를 사용하여 제너릭 메소드를 사용하는 법static void Swap(ref T lhs, ref T rhs){ T temp; temp = lhs; lhs = rhs; rhs = temp;}static void Main(string[] args){ int a = 1..
2024.10.06
C#
[C#] CS0273에러 accessor must be more restrictive than the property or indexer
CS0273internal class Player{ public int PosX { get; private set; } public int PosY { get; private set; } private Board Board { get; private set; }}이 코드들 중 다음 부분에서 문제가 발생한다.private Board Board { get; private set; }  이것을 에러가 발생하지 않도록 바꾸려면 다음과 같이 만든다:private Board Board { get; set; }setter는 전체 프로퍼티의 접근성(accessibility)이므로 이미 private이다.  기본적으로 프로퍼티의 `get;` 또는 `set;`의 접근 제한자를 지정하려면 다른 경우보다 더 ..
2024.09.25
C#
[C#] 데이터 타입
Built-in 데이터 타입 C#에서 제공하는 데이터 타입은 밑의 표에 적혀있다. 뒤에 나올 표들의 각 C# 키워드로 데이터타입을 표현할 수 있다. Type의 범주는 다음과 같이 두 개로 나뉜다. Value type(값 형식) Reference type(참조 형식) 이 두 가지의 형식차이는 상당히 큰 차이가 있는데, 이것은 다른 곳에서 다루기로 한다. Built-in value types C# type keyword .Net Type bool System.Boolean byte System.Byte sbyte System.SByte char System.Char decimal System.Decimal double System.Double float System.Single int System.Int32..
2023.01.05
C#
no image
[C#] 변수
변수란? 우선 변수의 개념부터 알아봅시다. C#에서 변수는 어떤 값의 저장 위치를 나타냅니다. 그리고 모든 변수들은 type을 가지는데, type이란 변수에 어떤 값을 저장할 수 있는지를 나타냅니다. 변수를 프로그래머가 사용할 수 있도록 하려면 총 2가지의 과정을 거쳐야 합니다. 선언(Declaring) : 변수의 type과 이름을 작성. 초기화(Initializing) : 변수의 값을 "최초로 할당"하는 작업을 초기화라고 합니다. int testVar; // 선언 testVar = 123; // 초기화 위 2가지 과정을 한 번에 이루어내려면 다음과 같이 선언 및 초기화 작업을 해주면됩니다. int testVar = 123; // 선언 및 초기화 이로써 기초적인 변수의 사용법은 알게되었지만 변수의 선언에..
2023.01.04
C#
no image
[C#] Boxing과 Unboxing에 대하여
목차1. Boxing과 Unboxing의 개요2. Boxing과 Unboxing이 성능에 미치는 영향에 관하여 요약 박싱은 값 타입을 참조 타입으로 변환하는 작업을 의미하고, 언박싱은 참조 타입의 값을 값 타입으로 변환하는 작업을 의미합니다.  값 타입의 변수가 저장되는 위치는 stack메모리에 위치하고, 참조 타입은 heap 메모리에 위치합니다. 박싱이 발생할 때 힙에 공간을 할당해서(box) stack에 있는 값을 복사해 넣습니다. 그리고 stack 메모리에서는 값이 저장되어있는 객체를 가리키는 힙 메모리의 주소를 저장하게 됩니다. 사용 예시코드int i = 123; // a value typeobject o = i; // boxing (박싱발생, 암묵적 형변환 가능.)int j = ..
2021.08.08
C#
no image
[Unity, C#] 중첩 클래스(Nested Class)
중첩 형식 - C# 프로그래밍 가이드클래스, 구조체 또는 인터페이스 내에서 정의된 형식을 C#에서 중첩 형식이라고 합니다.docs.microsoft.com중첩 클래스의 사용이유1. 현재의 클래스의 일부분처럼 표현할 수 있는 클래스를 만들고자 할 때2. 클래스 외부에 공개하고 싶지 않은 형식을 만들고자 할 때 위 특징을 보면 이해가 되겠지만, 저런 특징들 때문에 접근 한정자의 디폴트가 private입니다. 뒤에 사용법 설명에서 확인할 수 있습니다. 중첩 클래스 사용법 중첩 클래스란 클래스, 구조체, 인터페이스 내에서 또 class가 선언된 것을 의미합니다. // 1번 코드public class Container{ class Nested { Nested() { } }}예제코드를 ..
2021.05.02
C#
[C#] 배열의 default 초기화
배열 - C# 프로그래밍 가이드C#의 배열 데이터 구조에 형식이 동일한 변수를 여러 개 저장합니다. 형식을 지정해 배열을 선언하거나 개체를 지정해 모든 형식을 저장합니다.docs.microsoft.com배열을 선언했을 때(static, 전역이 아닐 때) C언어처럼 생각하여 배열에 쓰레기 값이 들어가있을 것이라 착각하여 찾아본 레퍼런스입니다. 배열 개요배열에는 다음과 같은 속성이 있습니다.배열은 단일 차원, 다차원 또는 가변일 수 있습니다.차원 수와 각 차원의 길이는 배열 인스턴스를 만들 때 설정됩니다. 이러한 값은 인스턴스의 수명 동안 변경할 수 없습니다.숫자 배열 요소의 기본값은 0으로 설정되고, 참조 요소는 null로 설정됩니다.가변 배열은 여러 배열로 구성되어 있기 때문에 해당 요소가 참조 형식이며..
2021.04.30
C#