C# 将子属性反映给父属性的最佳方法
我有一些遗留代码需要重构。 首先,我有一个子类接口:C# 将子属性反映给父属性的最佳方法,c#,design-patterns,C#,Design Patterns,我有一些遗留代码需要重构。 首先,我有一个子类接口:IChild。还有一些实现该接口的类,比如:ChildType1:IChild,ChildType2:IChild和ChildType3:IChild 父对象具有子类型属性,每次只有其中一个属性被初始化。例如,如果ChildType1具有值,则ChildType2和ChildType3为null: class Parent { public ChildType1 Type1 { get; set; } public ChildT
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; }
//...
}
IChild
包含一些重要的属性枚举:
public interface IChild
{
ImportantEnum MyEnum { get; set; }
//
}
我的问题:关于我不知道启动了哪种类型的事实,通过父api使childMyEnum
属性可用的最佳方法是什么
我对重构持开放态度。我将对其进行重构,以便您直接公开当前的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
在我看来,您需要更改您的
父类
类-根据您迄今为止提供的信息,这似乎是使用泛型的最佳选择:
class Parent<TChild> where TChild : IChild
{
public TChild Child { get; set; }
}
类父级,其中TChild:IChild
{
公共TChild子项{get;set;}
}
是GetType()代码>昂贵?当我使用它时,我还没有发现它是昂贵的。这里有一个关于GetType效率的问题:这个设计模式的名称是什么?这不是一个设计模式,它是一个与.Net 2.0一样古老的.Net framework功能。这就是泛型。你可以在书中读到这一切