我正在为我的UI创建一个样式系统,每个UI类型都有一组StyleRule。例如ImageStyleRule
,您可以在其中设置要显示的图像,颜色等等。每个属性也需要是可选的,或Overridable
。将属性保留为null是不够的,因为在这种情况下我无法区分set-this-field-null和left-this-field-alone。
我的设置如下:
public class Overridable<T>
{
public T Value;
public bool Override;
}
public class ImageStyleRule : StyleRule<Image>
{
private Overridable<Sprite> sprite = null, overrideSprite = null;
private Overridable<Color> color = null;
private Overridable<Material> material = null;
public override void ApplyRule(Image element)
{
base.ApplyRule(element);
if (sprite.Override)
element.sprite = sprite.Value;
if (overrideSprite.Override)
element.overrideSprite = overrideSprite.Value;
if (color.Override)
element.color = color.Value;
if (material.Override)
element.material = material.Value;
}
}
正如您所看到的,ApplyRule
方法包含许多重复的代码,我真的想避免这种情况。我想我需要一个像这样的方法:setOverride(*element.sprite, sprite)
我传入字段和对Overridable的引用,它神奇地设置了正确的引用。
我尝试通过引用传递,并使用指针但没有工作。反射对我的用例来说太慢了。有没有其他方法可以解决这个问题?
提前致谢!