このPeople
クラスを考えてみましょう:
public class People
{
public virtual string Name { get; set; }
public virtual ushort Age { get; set; }
}
人のデータを取得できるサードパーティの実装がいくつかありますが、少しバリエーションがあります。たとえば、次のデータを取得できるメソッドがありますStrangePeople
。
public class StrangePeople
{
public string Name { get; set; }
public DateTime BirthDate { get; set; }
}
...
StrangePeople someone = GetData<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>();
多分ランタイムサブクラスは少しやり過ぎです...わかりません。