반응형

[Unity]/[C#] 54

[C#] 캡처(Capture feat. 람다식)

표현식 본문(Expresstion Lambda) : 본문의 코드를 한 줄로 단순화하여 쓴 경우 (input-parameters) => expression 문장 본문(Statement Lambda) : 중괄호를 포함한 경우 (input-parameters) => { } : 람다식으로 델리게이트 인스턴스를 생설할 때, 컴파일러는 람다식 내의 코드를 다른 메서드로 분리하여 생성합니다. 캡처 람다식 내에서 사용되었지만, 람다식 외부에서 선언된 변수 = 캡처된 변수. 람다식 자체의 매개변수, 람다식 내에서 선언된 지역 변수 = 캡처된 변수가 아님. 예시 코드) public class Test2_ { private string instanceField = "instanceField"; static public Ac..

[Unity]/[C#] 2022.10.12

[C#] 제네릭(Generic)

: 타입을 미리 정하지 않고, 선언할 때 타입을 지정. T로 주로 표기함. (ex) List : ArrayList와 달리 선언할 때 타입을 정함 → 다른 타입의 객체를 삽입하려하면 컴파일 오류 발생. 제네릭이 될 수 없는 것 : 필드, 속성, 인덱서, 생성자, 이벤트, 종료자 타입 parameter(매개변수)와 타입 argument(인수) public class List -> T : 타입 매개변수 List list = new List(); -> string이 타입 인수 제네릭 타입의 초기화 상태 : 개별적으로 초기화, 정적 필드를 독립적으로 가짐. public class GeneCounter { private static int value; public static void Increment() { va..

[Unity]/[C#] 2022.10.07

[C#] readonly 한정자 (feat.const 한정자)

: 변수를 상수로 만들어주며, (런타임 시에)값을 변경하거나 수정할 수 없습니다. * 기본적으로 static * 반드시 값이 초기화되어야 함. : 변수를 읽기 전용으로 만들어주며, 선언 시 또는 클래스 생성자에서 초기화 후에 수정할 수 없습니다. * 선언할 때 값을 초기화하는 것이 필수가 아님. * 생성자 외부에서 값을 수정할 수 없음. class ReadOnlyExample { public readonly int num = 5; public ReadOnlyExample() { num = 33; } public ReadOnlyExample(bool isTrue) { num = 500; } } ReadOnlyExample ex1 = new ReadOnlyExample(); ReadOnlyExample ex..

[Unity]/[C#] 2022.10.06

[C#] reflection

: 프로그램 실행 도중 객체의 정보를 조사하거나, 다른 모듈에 선언된 인스턴스를 생성하거나, 기존 개체에서 형식을 가져오고 해당하는 메서드를 호출, 또는 해당 필드와 속성에 접근할 수 있는 기능을 제공합니다. Type.GetConstructors() : 모든 public 생성자 가져옴 -> 괄호 안에 매개변수 타입이 찍힘 Type.GetMethods() : 해당 형식의 메서드 목록을 가져옴 Type.GetFields() : 해당 형식의 필드 목록을 가져옴 * 사용 예시 using System.Reflection; class Animal { public int age; public string name; public Animal(string name, int age) { this.name = name; t..

[Unity]/[C#] 2022.10.05

[C#] partial 클래스

: 클래스, 구조체, 인터페이스, 메서드의 정의를 둘 이상의 소스파일에 분할하는 것으로, 컴파일할 때 다시 결합합니다. * 사용 타이밍 대규모 프로젝트에서 여러 프로그래머가 동시에 한 클래스에 대해 작업할 경우 자동으로 생성된 소스로 작업하는 경우 → 소스 파일을 다시 만들지 않고도 클래스에 코드 추가 * 주의 사항 - 대리자, 열거형 선언에서는 partial 한정자를 사용할 수 없음. * 사용 방법 간단한 예시 public partial class Employee { public void DoWork() { Console.WriteLine("work"); } } public partial class Employee { public void DoSleep() { Console.WriteLine("slee..

[Unity]/[C#] 2022.10.04

[C#] 일반화 프로그래밍

* 일반화 대상 = 데이터 형식. * 형식 매개 변수 T는 모든 데이터 형식을 대신할 수 있습니다. * ArrayList, Queue, Stack, Hashtable 컬렉션들은 모두 object 형식을 기반으로 하기 때문에 태생적으로 성능 문제를 안고 있는데, 일반화 컬렉션은 컴파일시 컬렉션에서 사용할 형식이 결정되고, 쓸데없는 형식 변환을 일으키지 않아 성능 저하가 해결됩니다. 대표적인 일반화 컬렉션은 List, Queue, Stack, Dictionary가 있습니다. List = ArrayList의 일반화 버전, Dictionary = Hashtable의 일반화 버전입니다. * 타입 일반화 메서드 예시 static void CopyData(T[] source, T[] target) { target =..

[Unity]/[C#] 2022.09.30

[C#] 확장 메서드 기법

: 기존의 클래스에 손대지 않고 메서드를 추가하는 방법입니다. * 확장 메서드 사용 조건 확장 메서드를 정의할 클래스를 static으로 선언. 정의한 클래스 내부에 확장하고 싶은 메서드를 static으로 선언. 첫번째 파라미터로 메서드가 포함되어질 클래스를 this 포인터와 함께 적어줌. * 확장 메서드 사용 예시 public static class LongExtensions { public static string ToPrice(this long value) { return value.ToString("N0"); } } long a = 13343454323243; string price = a.ToPrice(); Console.WriteLine((price)); //13,343,454,323,243 출력

[Unity]/[C#] 2022.09.29

[C#] 메서드 매개 변수 : params, in, ref, out

* params : 가변 개수의 인수. * in : 매개 변수를 참조로 전달할 수 있지만, 호출된 메서드로만 읽을 수 있습니다. static void InArgExample(in int number) { number = 19; //오류 출력 -> 수정 불가능. } * ref : 인수가 값이 아닌 참조로 전달됨을 의미합니다. void Method(ref int refArgument) { refArgument = refArgument + 44; } int number = 1; Method(ref number); Console.WriteLine(number); //45 출력 -> 값타입인 int도 참조로 전달 * out : 매개 변수가 참조로 전달되고, 호출된 메서드에 의해 새로 기록되도록 해줍니다. 메서드가..

[Unity]/[C#] 2022.09.28

[C#] Tuple(튜플) 형식

: 간단한 데이터 구조로, 여러 데이터 요소를 그룹화하여 간결한 구문으로 제공합니다. 여러 값을 함께 리턴해야 할 때 유용합니다. 타입이 없는 튜플은 지역변수에 넣을 수 없습니다. var invalid = (10, null); → 유효하지 않음. 애리티(arity)가 동일하고, 그에 대응하는 요소의 타입이 암시적으로 변환 가능할 경우 튜플 리터럴을 튜플 타입으로 암시적 변환할 수 있습니다. 튜플 리터럴 : 각 요소는 값을 가지며, 이름을 선택적으로 지정할 수 있습니다 - (5, title: ”text”) 튜플 타입 : 각 요소가 타입을 가지며, 이름을 선택적으로 지정할 수 있습니다 - (int x, string) //튜플 변수를 선언하고 초기화 (double, int) t1 = (4.5, 3); Cons..

[Unity]/[C#] 2022.09.27
반응형