clr via c# 독서노트 5: 상수와 필드

1803 단어 c#
1. 상수는 값이 변하지 않는 기호이다.컴파일러가 식별하는 기원 형식의 상수만 정의할 수 있습니다.예를 들어 Boolean,Char,Byte,SByte,Int16,UInt16,Int32,UInt32,Int64,Single,Double,Decimal,String;
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

좋은 웹페이지 즐겨찾기