C\#기본 지연 로드 소개 및 인 스 턴 스
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
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