首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于向基类添加属性的设计模式

用于向基类添加属性的设计模式
EN

Stack Overflow用户
提问于 2009-11-26 07:15:12
回答 5查看 3.4K关注 0票数 0

我相信有一个聪明的方法来处理这件事,但我就是想不起来。以下是场景:

我有一个基类,大约有30个属性。假设我在这个类上有一个名为Type的属性。对于此类实例的子集,我希望根据Type属性再添加几个属性。在这种情况下,当我创建对象时,我可以只创建包含这些额外属性的基类的子类。我的问题是,用户可以基于组合框更改类型,而我需要能够将其转换回基类,或者将其更改为具有不同子集的附加属性的完全不同的子类。希望这一点能被清楚地理解。对如何处理这个问题有什么建议吗?

注意:这是一个棕地应用程序,所以尽管属性包的想法很吸引人,但如果没有重大的痛苦,它也是不可能的。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-11-27 01:34:05

感谢你们所有人的回答。最后我找到了这篇文章:"Using reflection to copy base class properties"

我对这篇文章进行了一些修改,并最终将其作为我的工作解决方案。(在我的示例中,我创建了一个名为Base的类,并从它派生了几个类):

代码语言:javascript
复制
  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
票数 0
EN

Stack Overflow用户

发布于 2009-11-26 07:18:30

只要有一个属性列表...

代码语言:javascript
复制
List<Properties> MyProps;

并适当地添加。

票数 2
EN

Stack Overflow用户

发布于 2009-11-26 07:19:24

如果你从一个非常修改过的factory pattern开始,你也许能够做到这一点。

我创建了一个基类,每当type属性因用户输入而发生变化时,工厂类(我就叫他Bob)负责返回指定类型的类。您可以调用Bob,传入类型和当前对象,Bob将返回特定的子类型。

例如:

代码语言:javascript
复制
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;
        }
    }
}

(注意:我还没有检查代码)

编辑:你知道...这不是一个真正的工厂模式,现在我把它放在代码中……我已经给东西重新命名了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1800608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档