使用“+”运算符添加构造函数的两个实例

Add two instances of a constructor using "+" operator

我需要帮助! 我在 C# 中的 class 中创建了一个具有 3 个重载的构造函数 其中一个构造函数采用 char[] 数组参数。

构造函数的两个实例是: 构造函数 C1 = new Constructor(); 构造函数 C2 = new Constructor(char[] arr)

现在的问题是: 构造函数 C3 = C1 + C2

我收到错误消息:运算符“+”不能应用于 'char[]' 和 'char[]'

类型的操作数

这是我尝试过的:

public class Constructor
{ 
#region(fields)
        char _myChar;
        public char[] _myCharArray; 
 #endregion

 #region(Constructors)
        public Constructor() { }

        public Constructor(char[] arr) 
            : this()
        { 
            this._myCharArray = arr;
        }

        public Constructor (char a)
            : this()
        {
            this._myChar = a;
        }
 #endregion


 #region(Methods)
        
        public void Write() 
        {
            Console.WriteLine(_myCharArray);
        }
        #endregion

 #region(Operators)
        public static Constructor operator +(Constructor C1, Constructor C2)
        {
            Constructor C3 = new Constructor();
            C3._myCharArray = C1._myCharArray + C2._myCharArray;
            return C3;
        }
 #endregion

}

 static void Main(string[] args)
 {
  Constructor C1 = new Constructors();
            Console.Write("Should print nothing: "); C1.Write(); Console.WriteLine();
            
            char[] a = { 'M', 'y', ' ', 'n', 'a', 'm', 'e' };
            Constructor C2 = new Constructor(a);
            Console.Write("Should print 'My name': "); C2.Write(); Console.WriteLine(); 
            
            Constructor C3 = C1 + C2;
            Console.Write("Should print 'My name': "); C3.Write(); Console.WriteLine();
}

问题出现在您的 + 运算符重载的这一行:

s3._myCharArray = s1._myCharArray + s2._myCharArray;

即使您可以为 user-defined Constructor class 重载 + 运算符,也不能重载 built-in 类型的 C# 运算符。因此,您需要将这两个数组组合成一个(如 Dmitry Bychenko 评论中所建议)

s3._myCharArray = s1._myCharArray.Concat(s2._myCharArray).ToArray();

这是最简单的一种,但是您也可以使用其他方法来组合char数组。例如:

s3._myCharArray = new T[s1._myCharArray.Length + s2._myCharArray.Length];
s1._myCharArray.CopyTo(result, 0);
s2._myCharArray.CopyTo(result, s1._myCharArray.Length);

无论您选择哪种方法,执行此操作后,您都可以按照您想要的方式连接 Constructor 对象:

Constructor C3 = C1 + C2;

之后您将在控制台中看到您想要的输出:

My name

有关 C# 中运算符重载的更多信息,请参见此处:Operator overloading (C# reference)

最后,你的整个 Constructor class 会是这样的:

public class Constructor
{
    #region(fields)
    public char[] _myCharArray;
    #endregion

    #region(Constructors)
    public Constructor()
    {
        this._myCharArray = new char[0];
    }

    public Constructor(char[] arr)
        : this()
    {
        this._myCharArray = arr;
    }

    public Constructor(char a)
        : this()
    {
        this._myCharArray = new char[1] { a };
    }
    #endregion

    #region(Methods)
    public void Write()
    {
        Console.WriteLine(_myCharArray);
    }
    #endregion

    #region(Operators)
    public static Constructor operator +(Constructor c1, Constructor c2)
    {
        Constructor c3 = new Constructor();
        c3._myCharArray = c1._myCharArray.Concat(c2._myCharArray).ToArray();
        return c3;
    }
    #endregion
}