C# 如何强制实现多个构造函数

C# 如何强制实现多个构造函数,c#,constructor,word-wrap,C#,Constructor,Word Wrap,我正在创建一个基类节点,它本质上包装了我正在为其编写插件的程序中另一个类的实例,BaseAppObject。节点的属性和节点的任何派生通过两种方法BaseAppObject.SetUserString(键,值)和BaseAppObject.GetUserString(键,值)将其属性存储在BaseAppObject中 有两种情况需要实例化节点。其中BaseAppObject是干净的,没有用户字符串。在这种情况下,需要向构造函数传递要初始化的所有属性的值。第二个是当我有一个已经定义了用户字符串的B

我正在创建一个基类节点,它本质上包装了我正在为其编写插件的程序中另一个类的实例,BaseAppObject节点的属性和节点的任何派生通过两种方法BaseAppObject.SetUserString(键,值)BaseAppObject.GetUserString(键,值)将其属性存储在BaseAppObject

有两种情况需要实例化节点。其中BaseAppObject是干净的,没有用户字符串。在这种情况下,需要向构造函数传递要初始化的所有属性的值。第二个是当我有一个已经定义了用户字符串的BaseAppObject时,我只想用一个节点对象来包装它。在这种情况下,我只需要运行初始化构造函数来设置\u baseObject字段。然后,对象的所有其他属性将仅从BaseAppObject中设置的用户字符串中读取

下面是我的类的简化版本

public abstract class Node
{
    BaseAppObject _baseObject;

    //reinitializing constructor
    public Node(BaseAppObject baseObject)
    {
         this._baseObject = baseObject;
    }

    //initializing constructor
    public Node(BaseAppObject baseObject, string name)
    {
        this._baseObject = baseObject;
        this.Name = name;
    } 

    public string Name
    {
        get { 
                string name = "";
                _baseObject.GetUserString("CPName", ref name);
                return name;             
            }

        set {
                _baseObject.SetUserString("CPName", value);
            }
    }
}
节点派生的其他类可以添加类似这样的附加属性

public CustomClass:Node
{

    //reinitializing constructor
    public CustomClass(BaseAppObject baseObj):base(baseObj)
    {
    }


    //initializing constructor
    public CustomClass(BaseAppObject baseObj,string name, string color):base(baseObj,name)
    {

        //here's an additional property added to CustomClass
        public string Color
        {
            get { 
                    string name = "";
                    this.BaseObject.GetUserString("Color", ref name);
                    return name;             
                }
            set {
                    this.BaseObject.SetUserString("Color", value);
                }
        }
}
这是可行的,但稍后如果我(或其他人)想要从节点派生另一个类,他们必须理解派生类需要有两个构造函数。一个用于初始化,另一个用于重新初始化

是否有某种方法使此实现成为节点类的固有特性?还是彻底的文档记录是唯一的选择

还有一种方法可以避免在从节点派生的每个类中放置相同的单参数构造函数(如下)

//reinitializing constructor
public ClassDerivedFromNode(BaseAppObject baseObject)
{
     this._baseObject = baseObject;
}

无法强制子类创建两个构造函数。文档和代码审查是有用的,但不是万无一失的。否则,您可能必须在构造函数中添加检查,以确保在调用重新初始化构造函数时设置了“CPName”属性,如果没有,则引发异常。或者,你可以做一个替代而不是抛出一个异常。

你可能想考虑你的问题的一个解决方案。

我认为你在最后一个代码片段中有一个打印错误,它应该使用:BASE(胡BaseObjor)语法。不,我正在将BaseAppObject从CustomClass构造函数传递回基节点类构造函数。