我有一些遗留代码需要重构。
首先,我有一个子类接口: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));
。以及一些实现该接口的类,例如:IChild
,ChildType1 : IChild
和ChildType2 : IChild
。
父级具有子类型属性,并且每次只有其中一个被初始化的示例,如果ChildType3 : IChild
具有值,则ChildType1
和ChildType2
为ChildType3
:>
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可用的最佳方法是什么?
我愿意进行重构。
答案 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