C# 这是一种正确的创作模式吗?

C# 这是一种正确的创作模式吗?,c#,oop,design-patterns,factory-pattern,builder-pattern,C#,Oop,Design Patterns,Factory Pattern,Builder Pattern,我是设计模式的新手,不知道下面列出的代码片段中有什么特殊类型的设计模式(如果有的话) 基本上有一个基类,它知道如何构建BaseProperty对象: public abstract class Base { private string m_name; public class BaseProperty { public string Name; } protected virtual BaseProperty NewProperty(

我是设计模式的新手,不知道下面列出的代码片段中有什么特殊类型的设计模式(如果有的话)

基本上有一个基类,它知道如何构建BaseProperty对象:

public abstract class Base
{
    private string m_name;

    public class BaseProperty
    {
        public string Name;
    }

    protected virtual BaseProperty NewProperty()
    {
        return new BaseProperty();
    }

    protected virtual void BuildProperty(ref BaseProperty prop)
    {
        prop.Name = m_name;
    }

    public BaseProperty Property
    {
        get
        {
            BaseProperty prop = NewProperty();
            BuildProperty(ref prop);

            return prop;
        }
    }
}
,下面是一个子类,它实现了自己的属性构建细节

public class Number : Base
{
    private double m_number;
    public class NumberProperty : BaseProperty
    {
        public double Number;
    }

    protected override BaseProperty NewProperty()
    {
        return new NumberProperty();
    }

    protected override virtual void BuildProperty(ref BaseProperty prop)
    {
        // build the common part
        base.BuildProperty(ref prop);

        // build my specific part
        NumberProperty numberProp = prop as NumberProperty;
        numberProp.Number = m_number;
    }
}
在这段代码中,我实现了工厂模式,可以看出,子类实现了自己的属性创建方法。其目的是收集所有已创建对象的属性以进行持久存储

让我困惑的是,在创建BaseProperty对象之后,它以增量方式“制造”,从构建基本部分的
base.BuildProperty(prop)
开始,然后该对象向下转换为一个
NumberProperty
,以构建其子类特定部分

我做得对吗? 有一个下线的操作。。。应该避免吗?如果是,如何做到这一点


谢谢

我认为在继承类编号中使用BuildProperty的方式存在问题。如果有人将该函数与BaseProperty对象一起用作参数,显然会导致异常,会发生什么情况?BaseProperty不应该也是抽象的吗?或者您希望以某种方式使用它吗?是的,这是一个很好的观点。向下投射可能是不安全的,这就是为什么我在寻找更好的方法。当然,我们可以在继承类中进行一些类型测试,但我想知道是否有更优雅的解决方案?我不知道为什么要将属性构造函数与BuildProperty函数分开。属性类的构造函数不应该设置其成员的值吗?它还需要做什么来强制拥有BuildProperty虚拟函数?