如何通过引用设置成员值?

时间:2018-02-02 20:08:21

标签: c# pointers

我正在为我的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的引用,它神奇地设置了正确的引用。

我尝试通过引用传递,并使用指针但没有工作。反射对我的用例来说太慢了。有没有其他方法可以解决这个问题?

提前致谢!

0 个答案:

没有答案