Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将子属性反映给父属性的最佳方法_C#_Design Patterns - Fatal编程技术网

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使child
MyEnum
属性可用的最佳方法是什么


我对重构持开放态度。

我将对其进行重构,以便您直接公开当前的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功能。这就是泛型。你可以在书中读到这一切