C\#4.0 의 새로운 기능 인'결 성 된 매개 변수'의 실현 에 대한 상세 한 설명

머리말
C\#4.0 결 성 된 매개 변수의 새로운 특성 에 대해 모두 가 낯 설 지 않 을 것 이 라 고 믿 습 니 다.결 성 된 매개 변수 란 말 그대로 성명 방법의 특정한 매개 변 수 를 지정 할 때 기본 값 을 지정 하 는 것 입 니 다.이 방법 을 호출 할 때 이 기본 값 을 사용 하면 이 매개 변 수 를 지정 할 필요 가 없습니다.많은 언어 차원 의 특성(문법 사탕)의 실현 과 마찬가지 로 부족 한 매개 변수 도 컴 파일 러 가 우 리 를 위해 하 는 작은 방법 이다.결 성 된 매개 변 수 는 최종 적 으로 두 개의 특수 한 사용자 정의 특성 인 OptionalAttribute 와 Default ParameterValueAttribute 로 나타 납 니 다.
목차
4.567917.1.매개 변수 가 부족 한 용법
  • 2.결 성 된 매개 변 수 를 실현 하 는 두 가지 특성:OptionalAttribute 와 Default Parameter ValueAttribute
  • 3.optionalAttribute 와 DefaultParameterValueAttribute 를 통 해 결 성 된 매개 변 수 를 직접 정의 합 니 다
  • 1.매개 변수 가 부족 한 용법
    예 를 들 어 다음 TestMethod 방법 은 다음 두 개의 매개 변수 bar 와 baz 가 부족 한 매개 변수 이 고 기본 값 은 각각'Bar'와'Baz'이다.
    
      1: static void TestMethod(string foo, string bar = "Bar", string baz = "Baz")
      2: {
      3:   Console.WriteLine("{0, -5} - {1, -5} - {2, -5}", foo, bar, baz);
      4: } 
    TestMethod 를 호출 할 때,우 리 는 부족 한 매개 변수 값 을 자 유 롭 게 선택 하거나,부족 한 값 을 덮어 씁 니 다.
    
      1: static void Main(string[] args)
      2: {
      3:   TestMethod("Foo");
      4:   TestMethod("Foo", "Bar1");
      5:   TestMethod("Foo", "Bar1", "Baz1");
      6: }
    다음은 출력 결과:
       1: Foo   - Bar   - Baz
       2: Foo   - Bar1  - Baz
       3: Foo   - Bar1  - Baz1
    결 성 된 매개 변수 에 대한 사용 은 두 가지 간단 한 제한 이 있 습 니 다.하 나 는 결 성 된 매개 변수 에 대한 성명 은 일반 매개 변수 뒤에 만 놓 을 수 있 습 니 다.다음 코드 에서 정 의 된 TestMethod 방법 에서 결 성 된 매개 변수 bar 뒤에 결 성 된 매개 변수 baz 가 있 습 니 다.이러한 코드 는 컴 파일 을 통 해 컴 파일 할 수 없습니다.(컴 파일 오류 정 보 는 optional parameters must appeared after all required parameters)
    
      1: static void TestMethod(string foo, string bar = "Bar", string baz)
      2: {
      3:   Console.WriteLine("{0, -5} - {1, -5} - {2, -5}", foo, bar, baz);
      4: }  
    그러나 결 성 된 매개 변 수 는 배열 매개 변수(params 매개 변수)와 함께 할 수 있 습 니 다.실제로 어떤 상황 에서 도 params 매개 변 수 는 마지막 성명 의 매개 변수 일 수 있 습 니 다.결 성 된 매개 변수 에 대한 성명 의 위치 제한,주요 재 업로드 방법의 식별 체제 가 결정 한 다 는 점 은 모두 가 쉽게 이해 할 수 있다.
    결 성 된 매개 변수 에 대한 또 다른 제한 은 지정 한 결 성 값 은 상수 여야 한 다 는 것 이다.이것 은 실제 적 으로 결 성 된 매개 변수 로 서 의 데이터 유형 에 제한 을 두 었 다―시스템 이 정의 하 는 기본 유형 일 수 밖 에 없다.아래 에 정 의 된 TestMethod 방법 에서 저 희 는 DateTime 형식의 부족 한 매개 변 수 를 정의 하고 매개 변수 부족 값 을 DateTime.Now 로 정의 합 니 다.DateTime.Now 는 상수 가 아니 기 때문에 이러한 코드 도 컴 파일 을 통 해 컴 파일 할 수 없습니다.(오류 메시지 컴 파일:Default parameter value for'date'must be a copile-time constant)
    
      1: static void TestMethod(DateTime date = DateTime.Now)
      2: {
      3:  //Others...
      4: }  
    2.결 성 된 매개 변 수 를 실현 하 는 두 가지 특성:OptionalAttribute 와 DefaultParameterValueAttribute
    왜 부족 한 매개 변수의 기본 값 은 상수 만 받 아들 일 수 있 습 니까?만약 네가 결 성 된 매개 변수의 본질 을 이해 했다 면,이것 은 문제 가 아니다.그렇다면 결 성 된 매개 변 수 는 어떻게 이 루어 졌 을 까?
    많은 언어 차원 의 특성(문법 사탕)의 실현 과 마찬가지 로 부족 한 매개 변 수 는 컴 파일 러 가 우 리 를 위해 하 는 작은 방법 이 고 진정 으로 컴 파일 된 것 은 우리 가 더 이상 알 수 없 는 것 이다.결 성 된 파 라 메 터 를 포함 하 는 C\#코드 가 컴 파일 된 후에 결 성 된 파 라 메 터 는 두 개의 특수 한 사용자 정의 특성 인 OptionalAttribute 와 Default ParameterValueAttribute 에 나타 납 니 다.전 자 는 매개 변 수 를 결 성 된 매개 변수 로 표시 하고 후 자 는 결 성 된 값 을 지정 한다.
    
      1: [ComVisible(true), AttributeUsage(AttributeTargets.Parameter, Inherited=false)]
      2: public sealed class OptionalAttribute : Attribute
      3: {
      4: }
      5: 
      6: [AttributeUsage(AttributeTargets.Parameter)]
      7: public sealed class DefaultParameterValueAttribute : Attribute
      8: {
      9:   public DefaultParameterValueAttribute(object value);
     10:   public object Value {get; }
     11: }
    처음에 우리 가 정의 한 TestMethod 방법 에 대해 컴 파일 된 형식 은 다음 과 같다.
    
      1: private static void TestMethod(string foo, 
      2:   [Optional, DefaultParameterValue("Bar")] string bar, 
      3:   [Optional, DefaultParameterValue("Baz")] string baz)
      4: {
      5:   //Others..
      6: }
    매개 변수 가 부족 한 기본 값 은 결국 Default ParameterValueAttribute 의 매개 변수 로 존재 하기 때문에 상수 여야 합 니 다.
    3.optionalAttribute 와 DefaultParameterValueAttribute 를 통 해 결 성 된 매개 변 수 를 직접 정의 합 니 다.
    결 성 된 매개 변 수 는 최종 적 으로 OptionalAttribute 와 Default Parameter ValueAttribute 라 는 두 가지 특성 으로 나타 나 는데 우 리 는 이 를 통 해 결 성 된 매개 변 수 를 직접 정의 할 수 있 습 니까?정 답 은 물론 입 니 다.아래 코드 처럼 정상적으로 실 행 될 수 있 습 니 다.
    
      1: static void Main(string[] args)
      2: {
      3:   TestMethod("Foo");
      4:   TestMethod("Foo","Bar1");
      5:   TestMethod("Foo","Bar1","Baz1");
      6: }
      7: 
      8: private static void TestMethod(string foo, 
      9:   [Optional, DefaultParameterValue("Bar")] string bar, 
     10:   [Optional, DefaultParameterValue("Baz")] string baz)
     11: {
     12:   //Others..
     13: }
    결 성 된 매개 변 수 를 포함 하 는 방법 을 호출 하고 지정 한 매개 변 수 를 표시 하지 않 으 면 컴 파일 러 는 컴 파일 할 때 기본 값 을 자동 으로 추가 합 니 다.위의 Main 방법 에 대해 아래 는 이와 같은 효 과 를 가 진 컴 파일 후 코드 입 니 다.
    
      1: private static void Main(string[] args)
      2: {
      3:   TestMethod("Foo", "Bar", "Baz");
      4:   TestMethod("Foo", "Bar1", "Baz");
      5:   TestMethod("Foo", "Bar1", "Baz1");
      6: }
    optionalAttribute 와 Default Parameter ValueAttribute 라 는 두 가지 특성 을 통 해 결 성 된 파 라 메 터 를 정의 할 수 있 지만,결 성 된 파 라 메 터 를 일반 매개 변수 로 정의 하기 전에 컴 파일 러 가 잘못 보고 하지 않 습 니 다.오히려 방법 에 부족 한 매개 변 수 는 사실상 일반 매개 변수 에 해당 한다.
    
      1: static void Main(string[] args)
      2: {
      3:   //TestMethod("Foo","Baz");
      4:   //         
      5:   TestMethod("Foo","Bar1","Baz1");
      6: }
      7: private static void TestMethod(string foo, 
      8:   [Optional, DefaultParameterValue("Bar")] string bar, 
      9:   string baz)
     10: {
     11:   //Others..
     12: }
    총결산
    C\#4.0 의 새로운 기능 인'결 성 된 매개 변수'의 실현 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 C\#4.0 의 새로운 기능 인'결 성 된 매개 변수'내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 바 랍 니 다!

    좋은 웹페이지 즐겨찾기