C\#기본 지연 로드 소개 및 인 스 턴 스

3689 단어 로드 지연
지연 로 딩(lazy loading)디자인 모델 은 불필요 한 성능 비용 을 피하 기 위해 제 시 된 것 입 니 다.지연 로 딩 이란 데이터(속성 값 읽 기)가 진정 으로 필요 할 때 데이터 로 딩 작업 을 진정 으로 수행 하 는 것 입 니 다.이해 하기 편리 하도록 우 리 는 장면 을 만 들 고 우리 가 Hero(영웅)류 를 구성 해 야 한다 고 가정 합 니 다.모든 Hero 는 자신의 이름과(SpecialSkill)특수 기능 을 가지 고 있 습 니 다.모델 링 은 만 드 는 방법 입 니 다

public class Hero
{
    public string FullName { get; set; }
    public string Name { get; set; }
    public SpecialSkill Skill{ get; set; }

    public Hero(string name)
    {
        Name = name;
        FullName = "Super " + name;
        Skill = new SpecialSkill(name);
    }
}
public class SpecialSkill
{
    public int Power { get; set; }
    public string SkillName { get; set; }
    public int StrengthSpent { get; set; }
    public SpecialSkill(string name)
    {
        Console.WriteLine("loading special skill .....");
        Power = name.Length;
        StrengthSpent = name.Length * 3;
        SkillName = name + " Blazing";
        Console.WriteLine(SkillName + ",... this's what makes a legend!");
    }
}
class Program
{
    static void Main(string[] args)
    {
        Hero hero = new Hero("wukong");           
        Console.WriteLine("

.......................Press Enter to continue.......................

");
        Console.Read();
        Console.WriteLine("Hero's special skill: " + hero.Skill.SkillName);
        Console.Read();
        Console.Read();
    }
}

프로그램 을 실행 한 후에 다음 과 같이 출력 합 니 다.이 예 는 이해 하기 쉽 고 결과 도 분명 합 니 다.

단점 은 Hero 구조 함 수 를 실행 할 때 SpecialSkill 의 모든 속성 이 불 러 왔 다 는 것 입 니 다.이 Hero 의 FullName 만 가 져 오 려 면 SpecialSkill 의 모든 값 을 불 러 왔 습 니 다.속성의 불 러 오 는 지연 은 Lazy가 없 기 전에 이렇게 할 수 있 습 니 다

public class Hero
 {
     public string FullName { get; set; }
     public string Name { get; set; }
     private SpecialSkill skill;
     public SpecialSkill Skill
     {
         get { return skill ?? (skill = new SpecialSkill(Name)); }
     }
     public Hero(string name)
     {
         Name = name;
         FullName = "Super " + name;
        

     }
 }

즉,속성 SpecialSkill 의 불 러 오 는 방법 을 수정 합 니 다.그러면 프로그램 을 다시 실행 할 때,받 은 출력 은:

아주 좋아요!이것 이 바로 우리 가 원 하 는 효과 입 니 다.이렇게 하면 시스템 을 더욱 효율 적 으로 할 수 있 습 니 다.Lazy는 net framework 가 Lazy류 를 도입 한 후에 우 리 는 그것 을 사용 하여 실현 할 수 있 습 니 다

public class Hero
{
    public string FullName { get; set; }
    public string Name { get; set; }

    private readonly Lazy<SpecialSkill> skill;
    public SpecialSkill Skill
    {
        get { return skill.Value; }
    }

    public Hero(string name)
    {
        Name = name;
        FullName = "Super " + name;

        skill = new Lazy<SpecialSkill>(() => new SpecialSkill(name));
    }
}

Lazy는 초기 화 지연 에 대한 지원 을 제공 합 니 다.Lazy의 속성 Value 는 현재 Lazy인 스 턴 스 의 지연 초기 화 값 을 가 져 옵 니 다.Lazy의 장점 은 속성 캐 시 방법 으로 이 루어 질 수 있 는데 왜 Lazy를 도입 합 니까?적어도 Lazy는 다음 과 같은 몇 가지 장점 이 있 습 니 다.Lazy Thread Safety Mode 를 가지 고 있 습 니 다.그러나 우 리 는 일반적으로 그것 을 사용 하지 않 습 니 다.매우 관건 적 인 상황 에서(여기 서 181 자 를 생략 합 니 다)속성의 정의 줄 을 더욱 간단하게 의미 에서 볼 때 더욱 명확 하고 가 독성 이 있 습 니 다.null 을 유효 치 로 허용 합 니 다.

좋은 웹페이지 즐겨찾기