clr via c# 독서노트 5: 상수와 필드
1803 단어 c#
2. c#도 비기원 유형의 상수를 정의할 수 있지만 전제는 값을null로 설정하는 것이다.
3. 컴파일러는 상수를 프로그램 집합 데이터에 저장한다.
4. 상수는 항상 실례 구성원이 아니라 정적 구성원으로 간주된다.상수를 정의하면 메타데이터가 생성됩니다.
5. 코드가 상수 기호를 인용할 때 컴파일러는 상수를 정의하는 프로그램 집합의 메타데이터에서 이 기호를 찾아 상수의 값을 추출하고 생성된 IL 코드에 값을 삽입한다.상수의 값은 코드에 직접 삽입되기 때문에 실행할 때 상수에 메모리를 분배할 필요가 없습니다.이외에 상수의 주소를 얻을 수도 없고 인용하는 방식으로 상수를 전달할 수도 없다.
6. CLR 지원 유형(정적) 필드 및 인스턴스(비정적) 필드유형 필드의 경우 필드 데이터를 수용하는 데 필요한 동적 메모리는 유형 대상에 분배되고 유형 대상은 유형이 AppDomain에 불러올 때 만들어집니다.AppDomain에 유형을 로드할 때는 언제입니까?이것은 보통 유형의 어떤 방법을 인용하여 처음으로 JIT 컴파일을 진행할 때이다.실례 필드라면, 필드 데이터를 수용하는 데 필요한 동적 메모리는 유형의 실례를 구성할 때 분배됩니다.
7.readonly 필드는 구조기(구조 함수) 방법에서만 쓸 수 있습니다.반사를 이용하여readonly 필드를 수정할 수 있습니다.
8. 내연 초기화: 클래스 필드를 정의할 때 직접 초기화 값이다. 예를 들어 다음과 같다.
public sealed class SomeType{
public readonly String Pathname="Untitled";//
}
그러나 내연 초기화는 실제 구조기에서 초기화되었다.이것은 단지 문법적으로 간략화할 뿐이다.내연 문법으로 몇 가지 성능 문제를 고려해야 한다.
9.readonly가 인용 유형 필드일 때 변경할 수 없는 것은 인용이지 필드 인용의 대상이 아니다. 예를 들어:
public sealed class AType{
//InvalidChars
public static readonly Char[] InvalidChars=new Char[]{'A','B','C'};
}
public sealed class AnotherType{
public static void M(){
// , ,
// InValidChars
AType.InvalidChars[0]='X';
AType.InvalidChars[1]='Y';
AType.InvalidChars[2]='Z';
// ,
// InvalidChars
AType.InvalidChars=new Char[] {'X','Y','Z'};
}
}
전재 대상:https://www.cnblogs.com/yuzhoumanwu/p/8537842.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C#Task를 사용하여 비동기식 작업을 수행하는 방법라인이 완성된 후에 이 라인을 다시 시작할 수 없습니다.반대로 조인(Join)만 결합할 수 있습니다 (프로세스가 현재 라인을 막습니다). 임무는 조합할 수 있는 것이다. 연장을 사용하여 그것들을 한데 연결시키는 것이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.