我有一段代码,如果类存在,我会将类的某些属性委托给另一个类。您可以在下面看到TimeProvider上定义的开始时间(如果存在)。
public override DateTime StartTime
{
get
{
return (TimeProvider != null) ? TimeProvider.StartTime : base.StartTime;
}
set
{
if (TimeProvider != null)
{
TimeProvider.StartTime = value;
}
else
{
base.StartTime = value;
}
}
}
现在我的'问题'是我有更多的属性(如endtime,currentime)我委托给TimeProvider,如果它不是null。所以我希望代码如下:
public override DateTime StartTime
{
get
{
return GetTime(()=>StartTime);
}
set
{
SetTime(()=>StartTime)
}
}
其中()=> StartTime表达式有时在TimeProvider上“评估”,有时在类本身上“评估”(它们共享一个基类)。可以这样做吗?最好不要使用反射。
答案 0 :(得分:1)
蛋糕
public class Foo
{
private string _string1;
public Foo foo { get; set; }
private T GetProperty<T>(Func<Foo,T> getter)
{
return foo == null
? getter(this)
: getter(foo);
}
private void SetProperty(Action<Foo> setter)
{
if (foo == null)
setter(this);
else
setter(foo);
}
public string String1
{
get { return GetProperty(a => a._string1); }
set { SetProperty(a => a._string1 = value); }
}
}