我相信有一个聪明的方法来处理这件事,但我就是想不起来。以下是场景:
我有一个基类,大约有30个属性。假设我在这个类上有一个名为Type的属性。对于此类实例的子集,我希望根据Type属性再添加几个属性。在这种情况下,当我创建对象时,我可以只创建包含这些额外属性的基类的子类。我的问题是,用户可以基于组合框更改类型,而我需要能够将其转换回基类,或者将其更改为具有不同子集的附加属性的完全不同的子类。希望这一点能被清楚地理解。对如何处理这个问题有什么建议吗?
注意:这是一个棕地应用程序,所以尽管属性包的想法很吸引人,但如果没有重大的痛苦,它也是不可能的。
发布于 2009-11-27 01:34:05
感谢你们所有人的回答。最后我找到了这篇文章:"Using reflection to copy base class properties"
我对这篇文章进行了一些修改,并最终将其作为我的工作解决方案。(在我的示例中,我创建了一个名为Base的类,并从它派生了几个类):
Private Shared Sub CopyBaseProperties(ByVal pSource As Base, ByVal pDestination As Base)
Dim fields() As FieldInfo = GetType(Base).GetFields(BindingFlags.NonPublic Or BindingFlags.Public Or BindingFlags.Instance)
For Each tmpField As FieldInfo In fields
tmpField.SetValue(pDestination, tmpField.GetValue(pSource))
Next
End Sub发布于 2009-11-26 07:18:30
只要有一个属性列表...
List<Properties> MyProps;并适当地添加。
发布于 2009-11-26 07:19:24
如果你从一个非常修改过的factory pattern开始,你也许能够做到这一点。
我创建了一个基类,每当type属性因用户输入而发生变化时,工厂类(我就叫他Bob)负责返回指定类型的类。您可以调用Bob,传入类型和当前对象,Bob将返回特定的子类型。
例如:
public class MyBase
{
public string Type { get; set; }
public string CommonProperty { get; set; }
}
public class ExtendedClass : MyBase
{
public string ExtraProperty { get; set; }
}
public static class MyNotFactory
{
public static MyBase Create(MyBase baseObject)
{
switch (baseObject.Type)
{
case "Extended":
return baseObject as ExtendedClass;
break;
default:
return baseObject;
break;
}
}
}(注意:我还没有检查代码)
编辑:你知道...这不是一个真正的工厂模式,现在我把它放在代码中……我已经给东西重新命名了。
https://stackoverflow.com/questions/1800608
复制相似问题