728x90

정리가 필요한 카테고리(추후 정리)/C#,Unity 43

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..

C#] 널 관련 연산자

널 접합 연산자(널 병합 연산자) : ??null-coalescing operator 좌측 피연산자가 null이 아니면, 그 피연산자에 의해 평가되고,좌측 피연산자가 null이면 우측 피연산자로 평가됨좌변이 null이 아닌 경우에는 우변은 절대 평가하지 않음.이 연산자는 nullable 형식과도 함께 사용 가능. 연산자는 다음 예처럼 변수에 default를 배정하는 데 사용할 수 있음. 12string s1 = null;string s2 = s1 ?? "우변" ; // s2는 "우변"으로 평가cs 널 조건 연산자 : ?.null-conditional operator C# 6.0에 새로 추가된 연산자로, 'Elvis 연산자'로도 불림.해당 연산자를 이용하면 표준적인 마침표 연산자를 이용해 메서드를 호출하거..

C#] 정수 Overflow와 checked, unchecked 연산자

실행 시점에서 정수 형식에 대한 산술 연산이 형식에 담을 수 없을 정도로 크거나 작을 수 있음.이 경우 overflow가 발생하는데, 이 경우, 어떠한 예외도 던져지지 않고,연산의 결과는 끝에서 끝으로 순환(wraparound)됨. 더 큰 정수 형식으로 연산을 수행한 후, 여분의 유효 자리 비트들을 폐기한 것과 같은 결과가 나오는 것이 대표적인 예 123int a = int.Minvalue;a--;Console.WirteLine (a == int.MaxValue);cs 이러한 경우의 예외 처리를 해주고 싶을 때 checked 연산자를 이용하면 예외 처리가 가능하다. checked 연산자 / unchecked 연산자표현식이나 문장에 checked 연산자를 지정하면, 실행시점에서 해당 형식의 산술 한계를 넘..

C#] 폼 포커싱(Form Focusing)

C#을 활용해 프로그램을 만들다가문득 윈도우를 최상위에 오게 만들 일이 생겼다.소위 말해서 띄운 창에 포커싱을 해줘야 하는데,속성값 몇 개 바꾼다고 해결될 줄 알았던 게 감감 무소식Win API를 활용하는 방법이 있고'TopMost'을 변경해주는 간단한 방법이 있다. Win API 방식 활용 'using System.Runtime.InteropServices;' 빠뜨리지 말 것 123456// 윈도우가 비활성화 상태면 활성화 시켜야 포커싱[DllImport("user32.dll")]private static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);// 포커싱할 윈도우를 최상위에 오게 만듦[DllImport("user32.dll")]private ..

728x90