实施类型化限制 属性
Implement a typed restricted property
两个 classes:A 和 B,每个都有一个 MyProp 属性。
A的MyProp属性只能是A类型。 B 的 MyProp 属性 可以是 A 或 B 类型。
为了实现这一点,我考虑创建一个接口 IBase,其中包含一个 属性 IBase 类型的 MyProp,并让 A 和 B 实现它。
这种情况下的问题是 A 可能有 B 类型的 MyProp,所以它不是一个选项。
我可以从界面中删除 MyProp 属性 并在 A 中创建一个类型 A 属性 并在 B 中创建一个 IBase 但我觉得这不是一个合适的解决方案,因为这两种类型都有一个 MyProp 属性 的工作方式相同,所以我觉得 属性 应该在层次结构中处理得更高。
我还考虑了一个通用抽象基 class,它有一个 属性 MyProp 的通用类型,但对于 B 类型,通用类型将是一个无限递归类型:
ABase<ABase<ABase<...>>>
有没有在 C# 中实现此目的的正确方法?
编辑:更改了 属性 的名称,因此不再有混淆
我认为这个问题不可能很好地解决"at compile time"可以这么说。但我认为,您应该为 A 和 B 创建一些共同的祖先,通过在不正确的类型检测时引发异常,使 属性 setter 中该类型的属性和控制类型都有效。
如果您的代码经过了适当的测试,那么仅在运行时才能检测到不正确的赋值这一事实应该无关紧要。
两个 classes:A 和 B,每个都有一个 MyProp 属性。
A的MyProp属性只能是A类型。 B 的 MyProp 属性 可以是 A 或 B 类型。
为了实现这一点,我考虑创建一个接口 IBase,其中包含一个 属性 IBase 类型的 MyProp,并让 A 和 B 实现它。
这种情况下的问题是 A 可能有 B 类型的 MyProp,所以它不是一个选项。
我可以从界面中删除 MyProp 属性 并在 A 中创建一个类型 A 属性 并在 B 中创建一个 IBase 但我觉得这不是一个合适的解决方案,因为这两种类型都有一个 MyProp 属性 的工作方式相同,所以我觉得 属性 应该在层次结构中处理得更高。
我还考虑了一个通用抽象基 class,它有一个 属性 MyProp 的通用类型,但对于 B 类型,通用类型将是一个无限递归类型:
ABase<ABase<ABase<...>>>
有没有在 C# 中实现此目的的正确方法?
编辑:更改了 属性 的名称,因此不再有混淆
我认为这个问题不可能很好地解决"at compile time"可以这么说。但我认为,您应该为 A 和 B 创建一些共同的祖先,通过在不正确的类型检测时引发异常,使 属性 setter 中该类型的属性和控制类型都有效。
如果您的代码经过了适当的测试,那么仅在运行时才能检测到不正确的赋值这一事实应该无关紧要。