使用“+”运算符添加构造函数的两个实例
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
}
我需要帮助! 我在 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
}