******含義:
C#2.0引入了局部類型的概念。局部類型允許我們將一個類、結構或接口分成幾個部分,分別實現在不同幾個不同的.CS文件中。
******適用情況:
(1)類特別大,不適宜放在一個文件中實現
(2)一個類中的代碼的一部分爲自動化工具生成的代碼,不宜與我們自己編寫的代碼混合在一起。
(3)需要多人合作編寫一個類。
******實例DeMO:
採用T4模板生成的公用工廠代碼類:由工具生成的公用的類。
namespace ITOO.Exam.BLLFactory
{
public partial class BLLAbstractFactory
{
private static object GetInstance(string assembly, string className)
{
var obj = Assembly.Load(assembly).CreateInstance(className, true);
return obj;
}
public static IExamAnswerRecordEntityBLL GetExamAnswerRecordEntityBLL()
{
string classFullName = ConfigurationManager.AppSettings["BLLNameSpace"] + ".ExamAnswerRecordEntityBLL";
var obj = GetInstance(ConfigurationManager.AppSettings["BLLAssembly"], classFullName);
return obj as IExamAnswerRecordEntityBLL;
}
public static IExamApplyExamEntityBLL GetExamApplyExamEntityBLL()
{
string classFullName = ConfigurationManager.AppSettings["BLLNameSpace"] + ".ExamApplyExamEntityBLL";
var obj = GetInstance(ConfigurationManager.AppSettings["BLLAssembly"], classFullName);
return obj as IExamApplyExamEntityBLL;
}
public static IExamCheatControlEntityBLL GetExamCheatControlEntityBLL()
{
string classFullName = ConfigurationManager.AppSettings["BLLNameSpace"] + ".ExamCheatControlEntityBLL";
var obj = GetInstance(ConfigurationManager.AppSettings["BLLAssembly"], classFullName);
return obj as IExamCheatControlEntityBLL;
}
public static IExamCourseQuestionTypeBLL GetExamCourseQuestionTypeBLL()
{
string classFullName = ConfigurationManager.AppSettings["BLLNameSpace"] + ".ExamCourseQuestionTypeBLL";
var obj = GetInstance(ConfigurationManager.AppSettings["BLLAssembly"], classFullName);
return obj as IExamCourseQuestionTypeBLL;
}
public static IExamDetailsPaperEntityBLL GetExamDetailsPaperEntityBLL()
{
string classFullName = ConfigurationManager.AppSettings["BLLNameSpace"] + ".ExamDetailsPaperEntityBLL";
var obj = GetInstance(ConfigurationManager.AppSettings["BLLAssembly"], classFullName);
return obj as IExamDetailsPaperEntityBLL;
}
public static IExamDictionaryEntityBLL GetExamDictionaryEntityBLL()
{
string classFullName = ConfigurationManager.AppSettings["BLLNameSpace"] + ".ExamDictionaryEntityBLL";
var obj = GetInstance(ConfigurationManager.AppSettings["BLLAssembly"], classFullName);
return obj as IExamDictionaryEntityBLL;
}
public static IExamDictionaryOperationRecordEntityBLL GetExamDictionaryOperationRecordEntityBLL()
{
string classFullName = ConfigurationManager.AppSettings["BLLNameSpace"] + ".ExamDictionaryOperationRecordEntityBLL";
var obj = GetInstance(ConfigurationManager.AppSettings["BLLAssembly"], classFullName);
return obj as IExamDictionaryOperationRecordEntityBLL;
}
public static IExamDictionaryTypeEntityBLL GetExamDictionaryTypeEntityBLL()
{
string classFullName = ConfigurationManager.AppSettings["BLLNameSpace"] + ".ExamDictionaryTypeEntityBLL";
var obj = GetInstance(ConfigurationManager.AppSettings["BLLAssembly"], classFullName);
return obj as IExamDictionaryTypeEntityBLL;
}
public static IExamDictionaryTypeOperatingRecordEntityBLL GetExamDictionaryTypeOperatingRecordEntityBLL()
{
string classFullName = ConfigurationManager.AppSettings["BLLNameSpace"] + ".ExamDictionaryTypeOperatingRecordEntityBLL";
var obj = GetInstance(ConfigurationManager.AppSettings["BLLAssembly"], classFullName);
return obj as IExamDictionaryTypeOperatingRecordEntityBLL;
}
public static IExamEndTestSettingEntityBLL GetExamEndTestSettingEntityBLL()
{
string classFullName = ConfigurationManager.AppSettings["BLLNameSpace"] + ".ExamEndTestSettingEntityBLL";
var obj = GetInstance(ConfigurationManager.AppSettings["BLLAssembly"], classFullName);
return obj as IExamEndTestSettingEntityBLL;
}
public static IExamErrorRecordEntityBLL GetExamErrorRecordEntityBLL()
{
string classFullName = ConfigurationManager.AppSettings["BLLNameSpace"] + ".ExamErrorRecordEntityBLL";
var obj = GetInstance(ConfigurationManager.AppSettings["BLLAssembly"], classFullName);
return obj as IExamErrorRecordEntityBLL;
}
public static IExamExamEntityBLL GetExamExamEntityBLL()
{
string classFullName = ConfigurationManager.AppSettings["BLLNameSpace"] + ".ExamExamEntityBLL";
var obj = GetInstance(ConfigurationManager.AppSettings["BLLAssembly"], classFullName);
return obj as IExamExamEntityBLL;
}
public static IExamExamineeExamEntityBLL GetExamExamineeExamEntityBLL()
{
string classFullName = ConfigurationManager.AppSettings["BLLNameSpace"] + ".ExamExamineeExamEntityBLL";
var obj = GetInstance(ConfigurationManager.AppSettings["BLLAssembly"], classFullName);
return obj as IExamExamineeExamEntityBLL;
}
public static IExamExamRoomPlanEntityBLL GetExamExamRoomPlanEntityBLL()
{
string classFullName = ConfigurationManager.AppSettings["BLLNameSpace"] + ".ExamExamRoomPlanEntityBLL";
var obj = GetInstance(ConfigurationManager.AppSettings["BLLAssembly"], classFullName);
return obj as IExamExamRoomPlanEntityBLL;
}
public static IExamFeedBackRecordEntityBLL GetExamFeedBackRecordEntityBLL()
{
string classFullName = ConfigurationManager.AppSettings["BLLNameSpace"] + ".ExamFeedBackRecordEntityBLL";
var obj = GetInstance(ConfigurationManager.AppSettings["BLLAssembly"], classFullName);
return obj as IExamFeedBackRecordEntityBLL;
}
public static IExamHardwareEntityBLL GetExamHardwareEntityBLL()
{
string classFullName = ConfigurationManager.AppSettings["BLLNameSpace"] + ".ExamHardwareEntityBLL";
var obj = GetInstance(ConfigurationManager.AppSettings["BLLAssembly"], classFullName);
return obj as IExamHardwareEntityBLL;
}
public static IExamPaperEntityBLL GetExamPaperEntityBLL()
{
string classFullName = ConfigurationManager.AppSettings["BLLNameSpace"] + ".ExamPaperEntityBLL";
var obj = GetInstance(ConfigurationManager.AppSettings["BLLAssembly"], classFullName);
return obj as IExamPaperEntityBLL;
}
public static IExamPapeReportCardEntityBLL GetExamPapeReportCardEntityBLL()
{
string classFullName = ConfigurationManager.AppSettings["BLLNameSpace"] + ".ExamPapeReportCardEntityBLL";
var obj = GetInstance(ConfigurationManager.AppSettings["BLLAssembly"], classFullName);
return obj as IExamPapeReportCardEntityBLL;
}
public static IExampEmpowerEntityBLL GetExampEmpowerEntityBLL()
{
string classFullName = ConfigurationManager.AppSettings["BLLNameSpace"] + ".ExampEmpowerEntityBLL";
var obj = GetInstance(ConfigurationManager.AppSettings["BLLAssembly"], classFullName);
return obj as IExampEmpowerEntityBLL;
}
public static IExamPerformanceScoreEntityBLL GetExamPerformanceScoreEntityBLL()
{
string classFullName = ConfigurationManager.AppSettings["BLLNameSpace"] + ".ExamPerformanceScoreEntityBLL";
var obj = GetInstance(ConfigurationManager.AppSettings["BLLAssembly"], classFullName);
return obj as IExamPerformanceScoreEntityBLL;
}
public static IExamQuestionBankEntityBLL GetExamQuestionBankEntityBLL()
{
string classFullName = ConfigurationManager.AppSettings["BLLNameSpace"] + ".ExamQuestionBankEntityBLL";
var obj = GetInstance(ConfigurationManager.AppSettings["BLLAssembly"], classFullName);
return obj as IExamQuestionBankEntityBLL;
}
public static IExamQuestionTypeDetailsEntityBLL GetExamQuestionTypeDetailsEntityBLL()
{
string classFullName = ConfigurationManager.AppSettings["BLLNameSpace"] + ".ExamQuestionTypeDetailsEntityBLL";
var obj = GetInstance(ConfigurationManager.AppSettings["BLLAssembly"], classFullName);
return obj as IExamQuestionTypeDetailsEntityBLL;
}
public static IExamQuestionTypeEntityBLL GetExamQuestionTypeEntityBLL()
{
string classFullName = ConfigurationManager.AppSettings["BLLNameSpace"] + ".ExamQuestionTypeEntityBLL";
var obj = GetInstance(ConfigurationManager.AppSettings["BLLAssembly"], classFullName);
return obj as IExamQuestionTypeEntityBLL;
}
public static IExamScoreLogEntityBLL GetExamScoreLogEntityBLL()
{
string classFullName = ConfigurationManager.AppSettings["BLLNameSpace"] + ".ExamScoreLogEntityBLL";
var obj = GetInstance(ConfigurationManager.AppSettings["BLLAssembly"], classFullName);
return obj as IExamScoreLogEntityBLL;
}
public static IExamTemplateDetailsEntityBLL GetExamTemplateDetailsEntityBLL()
{
string classFullName = ConfigurationManager.AppSettings["BLLNameSpace"] + ".ExamTemplateDetailsEntityBLL";
var obj = GetInstance(ConfigurationManager.AppSettings["BLLAssembly"], classFullName);
return obj as IExamTemplateDetailsEntityBLL;
}
public static IExamTemplateEntityBLL GetExamTemplateEntityBLL()
{
string classFullName = ConfigurationManager.AppSettings["BLLNameSpace"] + ".ExamTemplateEntityBLL";
var obj = GetInstance(ConfigurationManager.AppSettings["BLLAssembly"], classFullName);
return obj as IExamTemplateEntityBLL;
}
public static IExamTempQuestionBankEntityBLL GetExamTempQuestionBankEntityBLL()
{
string classFullName = ConfigurationManager.AppSettings["BLLNameSpace"] + ".ExamTempQuestionBankEntityBLL";
var obj = GetInstance(ConfigurationManager.AppSettings["BLLAssembly"], classFullName);
return obj as IExamTempQuestionBankEntityBLL;
}
public static IExamVirtualExamineeBLL GetExamVirtualExamineeBLL()
{
string classFullName = ConfigurationManager.AppSettings["BLLNameSpace"] + ".ExamVirtualExamineeBLL";
var obj = GetInstance(ConfigurationManager.AppSettings["BLLAssembly"], classFullName);
return obj as IExamVirtualExamineeBLL;
}
}
}
自己擴展編寫的工廠類:在上面的基礎上,擴展我們自己的工廠方法
namespace ITOO.Exam.BLLFactory
{
/**********************************************************************************
* 開發人:SYQ
* 開發組:開發小組(九期十期考試組:)
* 接口說明: B層工廠類,當添加“ServicesBLL T4模板生成類”以外的B層類的時候,請在此類下添加工廠反射。
* 可以直接調用“AbstractFactory T4”模板中生成的方法“GetInstance”
* 開發時間:2014年12月15日23:50:41
* 開發版本:1.0
* *********************************************************************************/
public partial class BLLAbstractFactory
{
/// <summary>
/// 獲得在線添加試題的接口IExamOnlineAddQuestionBLL——WHY
/// </summary>
/// <returns></returns>
public IExamOnlineAddQuestionBLL GetExamAddQuestionBLL()
{
string FullClassName = ConfigurationManager.AppSettings["BLLNameSpace"] + "ExamOnlineAddQuestionBLL";
var obj = GetInstance(ConfigurationManager.AppSettings["BLLAssembly"], FullClassName);
return obj as IExamOnlineAddQuestionBLL;
}
/// <summary>
/// 題型管理的 B層外觀類 ——ZC
/// </summary>
/// <returns></returns>
public static IExamFaQuestionTypeEntityBLL GetExamFaQuestionTypeEntityBLL()
{
string classFullName = ConfigurationManager.AppSettings["BLLNameSpace"] + ".ExamQuestionTypeEntityBLL";
var obj = GetInstance(ConfigurationManager.AppSettings["BLLAssembly"], classFullName);
return obj as IExamFaQuestionTypeEntityBLL;
}
}
}
******總結:
(1)將公用的代碼抽象出來,提高代碼的複用性
(2)與接口、抽象類的基礎上,還提供了多人合作的方式。
(3)代碼擴展。
常常在考慮,面向對象的三個基本特徵:抽象,繼承,封裝是如何在代碼中體現的呢?去年的這個時候對這三個詞的體會還只是在停留在字面意思,如今在理解了泛型,委託,集合等概念的基礎上再理解這三個詞,已經具象了許多。對於部分的體驗,個人理解也應該基於這三個字去理解。其實微軟的任何一個細微之處的設計都值得我們好好的去學習與體會的。