C\#의 네 가지 기본 기교

1.가능 한 한 인터페이스 로 프로 그래 밍  .NET 프레임 워 크 는 클래스 와 인 터 페 이 스 를 포함 합 니 다.프로그램 을 작성 할 때.NET 의 어떤 종 류 를 사용 하고 있 는 지 알 수 있 습 니 다.그러나 이 경우 클래스 가 아 닌.NET 지원 인터페이스 로 프로 그래 밍 을 할 때 코드 가 더욱 안정 적 이 고 가용성 이 높 아 집 니 다.다음 코드 를 분석 하 십시오:  private void LoadList (object [] items, ListBox l)  {   for (int i = 0; i < items.Length;i++)    l.Items.Add (items[i].ToString ());  }  이 함 수 는 모든 대상 을 위 한 배열 에서 ListBox 를 불 러 옵 니 다.이 코드 는 배열 만 사용 할 수 있 도록 제한 되 어 있 습 니 다.가상 해 보면 그 대상 들 이 데이터베이스 에 있 거나 다른 집합 에 있 는 것 을 발견 할 수 있다.그러면 서로 다른 집합 유형 을 사용 하기 위해 프로그램 을 수정 해 야 한다.만약 당신 이 ICollection 인터페이스 로 그 프로그램 을 쓴다 면,당신 은 그 프로그램 을 수정 할 필요 가 없습니다.ICollection 인 터 페 이 스 를 실현 하 는 모든 유형 에 대해 그것 은 좋 은 작업 을 할 수 있 습 니 다.  private void LoadList (ICollection items,ListBox l)  {    foreach (object o in items)    l.Items.Add (o.ToString ());  }  ICollection 은 배열 과 모든 System.collection 의 집합 에 의 해 이 루어 집 니 다.이 밖 에 다 차원 배열 도 ICollection 인 터 페 이 스 를 지원 한다.그것 도 부족 하 다 면 데이터베이스.NET 류 역시 ICollection 인 터 페 이 스 를 지원 합 니 다.인터페이스 로 쓴 이 함 수 는 고치 지 않 아 도 많은 상황 에서 사용 할 수 있다.    2. 원본 데이터 대신 속성 사용  속성 은 언어 자체 의 요소 가 되 었 기 때문에 데이터 요 소 를 설명 할 때 역할 영역 등급 이 private 보다 클 필요 가 없습니다.코드 자체 가 속성 을 데이터 요소 로 볼 수 있 기 때문에 간단 한 데이터 형식 을 사용 하 는 편의 성 을 잃 지 않 았 습 니 다. 。반대로 그것 은 당신 의 코드 를 더욱 유연 하고 기능 을 강하 게 할 것 입 니 다.속성 은 당신 의 데이터 요 소 를 더욱 잘 봉인 합 니 다.속성 은 레이 지 를 사용 할 수 있 습 니 다. evaluation 에서 데 이 터 를 되 돌려 줍 니 다.lazy evaluation 은 사용자 가 요청 할 때 만 값 을 계산 하 는 것 이지 계속 유지 하 는 것 이 아니 라 는 뜻 이다.  마지막 으로 속성 은 virtual 일 수도 있 고 abstract 일 수도 있 습 니 다.너 도 인터페이스 에서 속성 을 정의 할 수 있다.  여기 에는 두 가지 방법 이 같 지만 데이터 요 소 를 속성 으로 바 꾸 면 원래 클 라 이언 트 의 프로그램 이 서버 의 새 버 전 프로그램 에 접근 할 수 없습니다.실제로 웹 에서 service 에서 직렬 화 된 값 을 실현 하려 면 속성 으로 사용 할 수 있 습 니 다:  private int TheMonth = 0;  [XmlAttribute ("Month")]  public int Month  {   get {    return TheMonth;   }   set {    TheMonth = value;   }  }  간단하게 속성 을 통 해 모든 데이터 요 소 를 사유 화 할 수 있 습 니 다.    3. Producer/Consumer 에서 Delegate  실현 프로듀서 를 만 들 면 idiom 클래스 를 사용 할 때 deletate 를 사용 하여 consumer 에 게 알 립 니 다.이런 방법 은 인 터 페 이 스 를 사용 하 는 것 보다 더욱 유연 하 다.Delegate 는 여러 점 으로 전송 되 기 때문에 추가 코드 를 추가 하지 않 아 도 다 중 사용 자 를 지원 할 수 있 습 니 다.인터페이스 로 이렇게 하 는 것 에 비해 클래스 간 의 결합 성 을 낮 출 수 있다.  다음 클래스 는 키보드 입력 을 처리 하고 모든 register 에 전달 합 니 다. listeners:  public class KeyboardProcessor  {  private OnGetLine theFunc = null;  public OnGetLine OnGetLineCallback {   get {    return theFunc;   }   set {    theFunc = value;   }  }  public void Run (){  // Read input.  // If there is any listeners, publish:  string s;  do {   s = Console.ReadLine ();   if (s.Length == 0)    break;   if (theFunc != null){    System.Delegate [] funcs =theFunc.GetInvocationList();    foreach (OnGetLine f in funcs) {     try {      f (s);     } catch (Exception e) {      Console.WriteLine      ("Caught Exception: {0}", e.Message);     }    }   }  } while (true);  }  모든 수량의 listeners 는 producer 에 등록 할 수 있 습 니 다.그들 이 해 야 할 일 은 특정한 함수 인 deletate 를 제공 하 는 것 입 니 다.    4. 순서 초기 화 주의  C#1 에서 일부 변수 성명 에 initializer 의 개념 을 추가 했다.이들 은 구조 함수 전에 실 행 됩 니 다.실제 변 수 는 기본 클래스 의 구조 함수 가 실행 되 기 전에 초기 화 됩 니 다.  따라서 변 수 를 초기 화 할 때 기본 클래스 의 데 이 터 를 사용 하지 마 십시오.아직 구성 되 지 않 았 기 때 문 입 니 다.

좋은 웹페이지 즐겨찾기