.NET 4.0 中 Lazy 类让我的 ORM 小框架又向前迈了一步,下面是我做的一个小Demo,来演示 它的用法:
UserCompany.cs
/// <summary>
/// 用户所在的公司
/// </summary>
public class UserCompany
{
public int CompanyId { get; set; }
public string CompanyName { get; set; }
public string CompanyDescription { get; set; }
}
UserCompanyService.cs
public static class UserCompanyService
{
private static readonly List<UserCompany> ltCompany = new List<UserCompany>()
{
new UserCompany(){ CompanyId = 1, CompanyName = "中国移动", CompanyDescription = "中国移动的相信介绍在这里" },
new UserCompany(){ CompanyId = 2, CompanyName = "中国联通", CompanyDescription = "中国联通的相信介绍在这里" },
new UserCompany(){ CompanyId = 3, CompanyName = "中国电信", CompanyDescription = "中国电信的相信介绍在这里" },
};
public static List<UserCompany> GetAllCompany()
{
return ltCompany;
}
public static UserCompany GetCompanyById(int companyId)
{
return ltCompany.SingleOrDefault(c => c.CompanyId == companyId);
}
}
UserInfo.cs
/// <summary>
/// 用户信息
/// </summary>
public class UserInfo
{
public UserInfo()
{
UserCompany_UserCompanyId = new Lazy<UserCompany>(() => UserCompanyService.GetCompanyById(UserCompanyId));
}
public int Id { get; set; }
public string UserName { get; set; }
public DateTime UserBirthday { get; set; }
public int UserCompanyId { get; set; }
public Lazy<UserCompany> UserCompany_UserCompanyId { get; set; }
}
UserInfoService.cs
public class UserInfoService
{
private static readonly List<UserInfo> ltUserInfo = new List<UserInfo>()
{
new UserInfo(){ Id = 1, UserName = "张三", UserCompanyId = 1 },
new UserInfo(){ Id = 2, UserName = "李四", UserCompanyId = 2 },
new UserInfo(){ Id = 3, UserName = "王五", UserCompanyId = 1 },
new UserInfo(){ Id = 4, UserName = "赵六", UserCompanyId = 3 }
};
public static List<UserInfo> GetAllUserInfo()
{
return ltUserInfo;
}
public static UserInfo GetUserInfoById(int userInfoId)
{
return ltUserInfo.SingleOrDefault(u => u.Id == userInfoId);
}
}
UserInfoManager.cs
public class UserInfoManager
{
public static List<UserInfo> GetAllUserInfo()
{
return UserInfoService.GetAllUserInfo();
}
}
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace ConAppLazyload
{
class Program
{
static void Main(string[] args)
{
/* 基本 */
Lazy<string> lzTime = new Lazy<string>(Program.GetCurrentTime);
Console.WriteLine(lzTime.IsValueCreated);
Console.WriteLine(lzTime.Value);
Console.WriteLine(lzTime.IsValueCreated);
/* 高级 */
List<UserInfo> ltAllUserInfo = UserInfoManager.GetAllUserInfo();
foreach (UserInfo userInfo in ltAllUserInfo)
{
Console.WriteLine();
Console.WriteLine(userInfo.Id);
Console.WriteLine(userInfo.UserName);
Console.WriteLine(userInfo.UserBirthday);
Console.WriteLine(userInfo.UserCompanyId);
Console.WriteLine(userInfo.UserCompany_UserCompanyId.IsValueCreated);
Console.WriteLine(userInfo.UserCompany_UserCompanyId.Value.CompanyName);
Console.WriteLine(userInfo.UserCompany_UserCompanyId.IsValueCreated);
Console.WriteLine();
}
}
static string GetCurrentTime()
{
return DateTime.Now.ToString("yyyy-MM-dd");
}
}
}
附件下载:http://files.cnblogs.com/Music/CSharp4Lazy.rar
谢谢浏览!