[C#]C#학습노트-인덱스, 포인터 유형, 암시적 유형, 확장 방법, 섹션 방법, 익명 유형...
나조휘http://www.cnblogs.com/kesalin/)
《C#과.NET 프리미엄 프로그래밍》 독서노트
색인기, 포인터 유형
1, 인덱스 메서드 this[Type param]를 사용하여 유형의 인덱스를 정의할 수 있습니다.C#컴파일러는 인덱스 메소드에 대한 올바른 가져오기/설정 메소드를 매핑하는 Item 속성을 생성했습니다.예:
public Person this[int index]
{
get { return (Person)list[index];
set { list.Insert(index, value);
}
2. 인덱스 방법은 다시 불러올 수도 있고 다차원 인덱스를 실현할 수도 있으며 인터페이스에서 인덱스를 정의할 수도 있다.
3, 연산자 재부팅: [], () 및 약자 대입 연산자(+=, -= 등)는 재부팅할 수 없으며true,flase는 연산자로 사용할 수 있습니다.C# 유형에 관련된 이원 연산자가 다시 로드된 경우 해당 약자 대입 연산자가 자동으로 새 기능을 갖게 됩니다.마찬가지로 우리도 전증가++ 또는 전감소 - 자동적으로 후증가 또는 후감소 기능을 얻을 수 있다.C#에서 == 연산자를 다시 로드하려면 동시에 다시 로드해야 합니다! =연산자(이렇게 하지 않으면 컴파일러가 알릴 것이다) 이 규칙은 비교에 기반한 연산자(>, =, <=)에 적용됩니다.리셋 연산자는 내부에서 숨겨진 방법으로 표시됩니다.예: opAddition(), op_Equality () 등리셋 연산자가 지원되지 않는 다른 언어에서도 정적 숨김 방법을 사용할 수 있습니다.
4, C#은 사용자 정의 변환도 지원하며 변환 방법은 정적 으로 정의해야 합니다.Rectangle을 Square로 변환하는 경우리셋 연산자와 마찬가지로 implicit 또는 explicit 키워드를 포함하는 방법은 CIL에서 각각 전문 명령어op 에 대응한다Implicit 및 opExplicit.
public static explicit operator Square(Rectangle r)
{
Square s;
s.Length = r.Height;
return s;
}
5, C#도 원시적인 포인터 형식과 관련된 포인터 조작을 지원한다. 우리는 컴파일러의/unsafe 설정을 명확하게 설정하여 안전하지 않은 인코딩을 지원한다는 것을 표시해야 한다.우리는 unsafe 키워드를 사용하여 코드 블록 (구조, 클래스, 유형 구성원, 파라미터 포함) 을 안전하지 않은 코드로 특별히 설명합니다.다음 키워드는 안전하지 않은 인코딩에 사용됩니다:stackalloc (호출 창고에서 메모리를 직접 분배),fixed (안전하지 않은 상하문 메모리의 인용 형식 변수 주소를 고정시키는 데 사용되며, 실행 과정에서 스팸 수거기가 이 변수의 주소를 리셋하지 않습니다),sizeof입니다.
6, 예처리 명령: C#에서 별도의 예처리 절차가 없고 컴파일러의 문법 분석 단계에서 예처리 명령을 처리한다.전통적인 #define, #if 시리즈를 제외하고 C#는 코드 블록을 표시하는 #region, #endregion 예처리 명령을 추가했다.
암시적 유형
7. var 키워드(정확히 말하면 var은 키워드가 아니다. 우리는 var이라는 변수를 설명할 수 있다. 파라미터나 필드는 컴파일러가 틀리지 않는다. 우리는 var을 사용하여 공식적인 데이터 형식 이름을 대체하여 국부 변수, 파라미터와 필드를 만들 수 있다. 컴파일러는 국부 변수의 초기 값에 따라 변수의 데이터 형식을 추정할 수 있다.스텔스 형식 국부 변수는 강한 형식 데이터입니다.예:
static void DeclareImplicitVars()
{
var myInt = 0;
var myBool = true;
var myString = "It's a string";
}
var을 사용하여 스텔스 형식의 국부 그룹을 정의할 때, 그룹 초기화식의 각 그룹 구성원은 같은 추정 가능한 형식이어야 합니다.암시적 유형 로컬 변수는 기본적으로 System으로 설정되지 않습니다.Object.
var d = new[] {1, 10, 100, 100};
8. var을 사용하는 데는 제한이 있다. 우선, 현식 형식은 방법이나 속성 내 국부 변수의 성명에만 적용될 수 있고, var을 사용하여 반환값, 파라미터의 유형이나 유형의 데이터 구성원을 정의할 수 없다.그 다음에 var에서 성명하는 국부 변수는 성명할 때 동시에 값을 부여해야 하며,null을 초기 값으로 할 수 없습니다.다시 C# 을(를) 사용할 수 없습니까?표식은 빈 스텔스 형식의 국부 변수를 정의합니다.
9. 스텔스 유형 국부 변수의 역할: LINQ 기술은 조회 표현식을 사용한다. 조회 자체의 형식에 따라 결과 집합을 동적으로 만들 수 있다. 그러면 우리는 var을 사용할 수 있고 조회가 되돌아올 수 있는 유형을 현식으로 정의할 필요가 없다.
자동 속성
10, 자동 속성: 간단한 필드 데이터 봉인 과정을 간소화하기 위해 C#3.0에서 자동 속성 문법을 제공하기 시작했습니다. 이 특성은 컴파일러에 지원하는 필드와 관련된 C# 속성을 정의하는 새로운 문법을 사용할 수 있습니다.추상적인 속성을 정의하려면 abstract 키워드를 사용해야 합니다.주의: 자동 속성을 정의하려면 읽기와 쓰기 두 가지 기능을 제공해야 합니다. 읽기나 쓰기만 하는 자동 속성을 구축할 수 없습니다.예:
class Car
{
public sting Name { get; protected set; };
}
확장 방법
11, C#3.0에서는 방법을 확장 방법으로 정의할 수 있습니다.간단하게 말하자면 확장 방법은 기존의 컴파일된 유형(예를 들어 클래스, 구조, 인터페이스)과 현재 컴파일될 유형(예를 들어 확장 방법을 포함하는 유형)이 직접 업데이트되지 않은 상황에서 기능적인 확장을 얻을 수 있도록 허용한다.이렇게 하면 확장 방법을 통해 우리는 미리 컴파일된 유형 (심지어 우리가 이 유형의 코드를 가지고 있지 않음) 에 기능을 추가할 수 있으며, 이 방법들은 독립적으로 분리되어 저장될 수 있다.
12. 확장 방법을 사용하는 데는 제한이 있다. 첫째, 확장 방법은 정적이어야 한다.둘째, 모든 확장 방법은 키워드this를 사용하여 첫 번째 파라미터(그리고 첫 번째 파라미터만)를 수식해야 한다.셋째, 모든 확장 방법은 메모리에 있는 정확한 실례로만 호출되거나, 거기에 있는 정적 클래스를 통해서만 호출될 수 있다.예: 이 확장이 허용되므로 System.Int32는 자신의 값을 거꾸로 설정합니다.
static class MyExtensions
{
public static int ReverseDigits(this int i)
{
char[] digits = i.ToString().ToCharArray();
Array.Reverse(digits);
string newDigits = new string(digits);
return int.Parse(newDigits);
}
}
13, 확장 방법을 사용하는 배후 컴파일러는 일반적인 방식으로만 정적 방법을 호출한다. 즉, 호출 방법의 변수를 호출 매개 변수로 한다(바로this).위의 예와 같이 컴파일러는 뒤에서 My Extensions로 변환됩니다.ReverseDigits (aInt) 를 사용하면 일반적인 C# 문법을 사용하여 일반적인 정적 방법처럼 확장 방법을 호출할 수 있습니다.
14. 확장 방법의 정태성 때문에 확장 방법에서 확장된 유형의 구성원에 직접 접근할 수 없지만this를 사용하여 확장된 유형을 사용할 수 있기 때문에 공공 구성원(단지 공공 구성원)
15, 확장 방법의 역할 영역: 확장 방법을 포함하는 정적 형식을 독립된 이름 공간에 두면 같은 프로그램 집합에 있는 다른 이름 공간은 표준 C# 키워드using을 사용하여 정적 형식과 포함된 확장 방법을 가져올 수 있습니다.정확한 네임스페이스를 표시 상태로 가져오지 않으면 현재 C# 코드 파일에는 확장 방법을 사용할 수 없습니다.
16, 마이크로소프트는 확장 방법을 독립된 프로그램 집합(독립된 명칭 공간) - 확장 라이브러리에 놓아 코드의 모듈화와 관리를 편리하게 하는 것을 추천한다.우리는 클래스를 확장할 수 있을 뿐만 아니라 인터페이스도 확장할 수 있다.확장 인터페이스는 약간 특별하다. 우리가 인터페이스를 확장해서 새로운 구성원을 가지게 할 때 반드시 이 구성원들의 실현을 제공해야 한다. 이것은 인터페이스 유형의 본질에서 벗어난 것 같다(실제로는 이 인터페이스를 실현하기 때문에 유형은 모두 정태적인 새로운 구성원의 실현을 가진다).
섹션 방법(partial)
17. 우리는partial 키워드를 사용하여 분류 정의를 구축할 수 있다. 그러면 우리는 여러 개의 코드 파일에 걸쳐 유형의 문법을 실현할 수 있고 각각의 분류 유형만 똑같은 완전한 한정명을 가진다.C#3.0부터 우리는partial을 방법 단계에 적용할 수 있다. 이것은 우리가 한 파일에서 방법의 원형을 구축하고 다른 파일에서 실현할 수 있도록 허락하지만, 이렇게 하는 데는 많은 제한이 있다.첫째, 분부 방법은 분부류에서만 정의할 수 있다.둘째, 부분 방법은void로 돌아가야 한다.셋째, 분부 방법은 정적 또는 실례적인 단계일 수 있다.넷째, 부분 방법은 매개 변수(this,ref 또는params에 의해 수식된 매개 변수를 포함하지만out 수식자를 가지면 안 된다).다섯째, 분부 방법은 항상 은식 사유이다.여섯째, 부분 방법은 이미 컴파일된 프로그램에 집중될 수도 있고 없을 수도 있다. 컴파일러는 방법체가 실현되었는지에 따라 방법이 프로그램에 집중되었는지 여부를 결정하기 때문에 방법체가 없으면 방법의 사용 흔적(호출, 메타데이터 설명 및 원형)은 모두 컴파일할 때 제거된다.
18, 분부 방법은 반드시 은밀하고 개인적인 것이어야 하며 항상void로 되돌아오기 때문에 분부 방법의 용도는 크지 않다.partial 수식자 표기 문법을 사용하여 다른 종류의 구축자는 실현 세부 사항을 선택할 수 있다. 그러면 부분 방법은 예처리 명령을 사용하는 것보다 간결한 방안을 제공하고 가상 실현이나 NotImplement Exception 이상을 던질 수 있다.또한 경량급 이벤트를 분부 방법으로 정의하는 것은 흔히 볼 수 있는 일이다. 그래서 디자이너들은 이벤트 처리 프로그램처럼 개발자가 어떤 이벤트에 응답해야 하는지 여부를 결정하기 위해 실현하거나 실현하지 않는 방법을 제공할 수 있다.이름 규약에 따라 이러한 경량 이벤트 처리 방법은 On 접두어를 사용합니다.
초기화
19, 대상 초기화기는 왼쪽에서 오른쪽으로 진행된다.용기에 대해 우리는 집합 초기화 문법을 사용할 수 있다. 이 문법은 일반 수조를 초기화하는 것처럼 용기를 초기화할 수 있다.
익명 형식
20, 익명 유형은 익명 방법의 자연스러운 연장이다.익명 형식을 정의하려면 새 키워드 var과 앞에서 설명한 대상 초기화 문법을 사용해야 합니다.예를 들면 다음과 같습니다.
static void Main(string[] args)
{
//
var myCar = new { Color = "White", Make = "Saab", CurrentSpeed = 60 };
Console.WriteLine(" >> My car is a {0} {1}.", myCar.Color, myCar.Make);
}
21, 모든 익명 유형은 자동으로 시스템을 상속합니다.Object. 따라서 기본 클래스의 모든 구성원을 지원하기 때문에 GetType (), ToString () 등의 방법을 호출할 수 있습니다.익명 클래스의 형식 이름은 컴파일러에 의해 결정됩니다. 대상 초기화 문법으로 정의된 모든 이름/값은 각각 같은 이름을 가진 속성과 이 속성에 봉인된 개인 데이터 구성원으로 비칩니다.익명 유형을 판단하는 객체 상등(Equals())은 두 객체의 각 데이터 구성원의 값을 비교하는 값에 기반한 의미이지만, 익명 유형은 C#의 상등 연산자(=와!=)를 다시 로드하지 않기 때문에 상등 연산자는 비교 참조에 기반한 것이다.
22, 익명 유형의 용도: 익명 형식을 신중하게 사용해야 한다. 특히 LINQ 기술을 사용할 때(실체를 신속하게 구축할 때 그 기능을 정의할 필요가 없다).익명 형식에는 많은 제한이 있다. 첫째, 익명 형식의 이름을 제어할 수 없다.둘째, 익명 유형은 System에서 상속됩니다.Object;셋째, 익명 형식은 이벤트, 사용자 정의 방법, 사용자 정의 연산자와 사용자 정의 재작성을 지원하지 않는다.넷째, 익명 유형은 은식 폐쇄(sealed)이다.다섯째, 익명 형식의 실례 생성은 기본 구조 함수만 사용합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.