是否有结构继承的实用替代方法? (C#)

时间:2010-04-25 11:05:09

标签: c# inheritance struct

我正在编写代码,用于填充Margin命名空间中类的PaddingBorderThicknessSystem.Windows.Documents属性。这些属性中的每一个都接受System.Windows.Thickness形式的值,这是一个结构。

但是,我希望将一些附加数据与每个属性分配相关联,随后可以通过我的代码检索这些属性。如果Thickness是一个类,我将继承它并在子类中定义属性以存储我的其他数据项。但由于它是一个结构,因此继承是不可能的。

有没有实用的方法来实现这一点,同时保持与我填充的属性的类型兼容性?

感谢您的想法,

3 个答案:

答案 0 :(得分:9)

没有好的替代品。

根据您要执行的操作,您可以使用所需的属性定义自己的类,并定义隐式转换运算符以执行隐式转换为正确的结构类型。然后你就可以将你的类传递给所有期望厚度参数的方法。

这会违反使用隐式转换运算符的建议,因为它声明隐式转换不应丢失任何信息。您将无法从正在阅读的酒店获得厚度,并查看您附加的额外信息。

这是你如何实现它的:

public class ThicknessEx
{
    public string ExtraData { get; set; }
    public Thickness Thickness { get; set; }

    public static implicit operator Thickness(ThicknessEx rhs)
    {
        return rhs.Thickness;
    }
}

但是,将其他数据存储在其他地方可能会更好。如何做将取决于您的需求和应用。

答案 1 :(得分:1)

您可以使用AugmentedThickness类型的Attached Dependency Properties,然后在更改时更新它们要更新的基础属性。这需要使用附加属性执行所有访问,因为只需设置Thickness属性就不会使用AugmentedThickness。如果有必要,你也可以(虽然它可能有点邪恶)听取厚度属性的明确更改(你没有启动)并强制它回到你的AugmentedThickness指定的值。

答案 2 :(得分:0)

你能否存储一个字典,其中键是结构的哈希码?