考慮這個People
類:如何在運行時創建子類來映射某些屬性,然後將其轉換回父類?
public class People
{
public virtual string Name { get; set; }
public virtual ushort Age { get; set; }
}
我有一些第三方的實現,可以得到人數據,但在一個小的變化。例如,我有一個能夠爲StrangePeople
檢索數據的方法:
由於類和變化量我試圖以找到一種方法來生成的People
運行時的子類可以轉化數據,以便稍後我可以將它重新放回People
。換句話說,用最小的努力生成這樣的子類:
public class StrangePeopleTranslator : People
{
private ushort? _mAge = null;
public override ushort Age
{
get
{
if (_mAge == null)
{
DateTime today = DateTime.Today;
int age = today.Year - BirthDate.Year;
if (BirthDate > today.AddYears(-age)) age--;
_mAge = age;
}
return _mAge.GetValueOrDefault();
}
set
{
_mAge = value;
}
}
public DateTime BirthDate { get; set; }
}
...
People someoneElse = (People)GetData<StrangePeopleTranslator>();
也許運行時子類它有點矯枉過正......我不知道。
你能澄清你所說的「運行時子」的意思。你是指以任何方式使用反射來自動生成代碼? – matcheek 2013-05-01 00:17:11
@matcheek是的,我看着c#類型的構建器,但如果它是做這種事情的唯一方法,我會放棄。 http://msdn.microsoft.com/en-us/library/system.reflection.emit.typebuilder.aspx – cvsguimaraes 2013-05-01 00:27:39
也許你正在尋找的'裝飾Pattern'? http://en.wikipedia.org/wiki/Decorator_pattern – 2013-05-01 01:37:45