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

是否有一种实用的替代结构继承的方法?(C#),c#,inheritance,struct,C#,Inheritance,Struct,我编写的代码将填充System.Windows.Documents命名空间中类的边距、填充和边界厚度属性。每个属性都接受一个System.Windows.Thickness形式的值,它是一个结构 但是,我希望将一些附加数据与这些属性分配中的每一个相关联,这些数据可能随后由我的代码检索。如果Thickness是一个类,我将继承它并在子类中定义属性来存储我的附加数据项。但由于它是一个结构,所以不可能继承 在保持与我正在填充的属性的类型兼容性的同时,是否有任何实用的方法来实现这一点 谢谢你的想法 蒂姆

我编写的代码将填充
System.Windows.Documents
命名空间中类的
边距
填充
边界厚度
属性。每个属性都接受一个
System.Windows.Thickness
形式的值,它是一个结构

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

在保持与我正在填充的属性的类型兼容性的同时,是否有任何实用的方法来实现这一点

谢谢你的想法

蒂姆

没有好的选择

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

但是,这与使用隐式转换运算符的建议背道而驰,因为它声明隐式转换不应丢失任何信息。您将无法从正在读取的属性中获取厚度,并且无法看到附加的额外信息

这是您可以实现它的方式:

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

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

但是,将额外的数据存储到其他地方可能会更好。如何做将取决于您的需要和应用程序。

您是否可以将字典存储在键为结构的哈希代码的位置

您可以使用类型AugmentedThickness,然后在它们更改时,更新它们要更新的基础属性。这要求使用附加的属性执行所有访问,因为仅设置厚度属性不会使用增强厚度。如有必要,您还可以(尽管这可能有点邪恶)侦听厚度属性的显式更改(您没有启动),并强制将其恢复到由“增强厚度”指定的值。

这取决于是否需要两个等厚度实例在额外数据中具有相同的值,或者不是。谢谢你提供了一个非常创新的解决方案。正如您所说,它几乎可以工作,但由于无法从分配给它的属性检索额外数据,这意味着必须在其他地方复制这些数据,这有点自欺欺人。我尝试通过SetValue()方法调整您的想法以处理底层依赖属性,但是SetValue()执行类型检查,这似乎是传递除预期类型之外的任何内容的障碍。