将孩子的财产反映给父母的最佳方法

时间:2018-10-21 08:56:44

标签: c# design-patterns

我有一些遗留代码需要重构。 首先,我有一个子类接口:const isPositiveInt = v => Number.isInteger(v) && v > 0, sumN = n => n * (n + 1) / 2, range = (m, n) => isPositiveInt(m) && isPositiveInt(n) ? sumN(Math.max(m, n)) - sumN(Math.min(m, n) - 1) : 'ERROR'; console.log(range(3, 10)); console.log(range(10, 3)); console.log(range()); console.log(range(3)); console.log(range('', 10)); console.log(range(0.2, 0.3));。以及一些实现该接口的类,例如:IChildChildType1 : IChildChildType2 : IChild

父级具有子类型属性,并且每次只有其中一个被初始化的示例,如果ChildType3 : IChild具有值,则ChildType1ChildType2ChildType3

null

class Parent { public ChildType1 Type1 { get; set; } public ChildType2 Type2 { get; set; } public ChildType3 Type3 { get; set; } //... } 拥有一些重要的枚举Enum:

IChild

我的问题:关于我不知道哪个类型被初始化的事实,使子public interface IChild { ImportantEnum MyEnum { get; set; } // } 属性通过父api可用的最佳方法是什么?

我愿意进行重构。

2 个答案:

答案 0 :(得分:2)

在我看来,您需要更改Parent类-根据您到目前为止提供的信息,它看起来像是使用泛型的理想人选:

class Parent<TChild> where TChild : IChild
{
    public TChild Child { get; set; }
}

答案 1 :(得分:1)

我将对其进行重构,以便您直接公开当前的IChild实例,从该实例中查询MyEnum很简单。

class Parent
{
    Public IChild Child { get; set; }
}
...
Parent p = new Parent();
IChild child = p.Child;
Type childType = p.Child.GetType();
ImportantEnum val = child.MyEnum