gpt4 book ai didi

c# - C# : Generics or polymorphism or both? 中的设计问题

转载 作者:太空宇宙 更新时间:2023-11-03 19:29:44 24 4
gpt4 key购买 nike

我需要一些帮助来解决我遇到的设计问题。我试图实现的是:

我有一个名为 Document 的主类。这个类有一个属性类列表。这些 Attribute 类有一些共同的属性,例如 Identity 和 Name,但它们在一个我称之为 Value 的属性上有所不同。 Value 类型对于每个不同的 Attribute 类都是不同的,类型可以是 string、integer、List、DateTime、float、List 以及由多个属性组成的类。一个例子是我称之为 PairAttribute 的类,它有 2 个属性:标题和描述。

我试图实现的是 Attribute 子类的 Value 属性的类型安全,并且这些子类应该能够添加到 Document 类的 Attribute 列表中。我本可以只创建一个具有类型对象的 Value 属性的 Attribute 类并完成它,但这正是我在这里试图避免的。

我猜公共(public)属性(Identity 和 Name)应该放在一个基类中,让我们调用那个 AttributeBase 类。但是我想要一个子类,比如 StringAttribute,其中 Value 属性是字符串类型,一个 IntegerAttribute 类,其中 Value 属性是 Integer 类型,一个 StringListAttribute,其中 Value 属性是 List 类型,一个 PairAttribute 类,其中 Value是一个具有多个属性等的类

你知道我该如何实现吗?这是我应该寻求的解决方案,还是解决此类安全问题的更好方法?我将不胜感激用于澄清的代码示例:)

最佳答案

您没有指定语言,但术语“泛型”(Java 和 C# 使用)描述的功能在其他语言(如 ML 和 Haskell)中通常称为“parametric polymorphism”。反之,“polymorphism”在Java和C#中的通称其实更准确的说法是“subtype polymorphism”。

关键是,无论您使用的是子类型多态性还是参数多态性,无论哪种方式您的问题都需要多态性,所以我认为您走在正确的轨道上。

问题真正归结为:参数多态性何时比子类型多态性更好?答案实际上很简单:什么时候需要您编写更少的代码。

因此,我建议您对这两种方法进行原型(prototype)设计,然后看看哪一种方法可以生成更简单、更易于理解的代码。那就那样做吧。

关于c# - C# : Generics or polymorphism or both? 中的设计问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5825106/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com