我有一个主要为其调用者提供2d数组的类(解析文件后)。它返回这个数组很好,但我需要为该调用者提供一种方法,将该2d数组转换为多分隔字符串。下面的伪代码。
完全披露:我的大部分时间都是在其他软件中编写脚本,所以我在OOP中有点生疏,特别是在c#
我希望来电者能够:
string[,] results;
getArray (arg1, arg2, etc, out results);
Debug.WriteLine(results.ToString(delim1, delim2));
但是我不清楚如何为ToString()创建这个覆盖,例如:
public override string[,] ToString(string rowSeparator, string columnSeparator)
{
string retVal = "";
for(int r = 0; r < this.getUpperBound(0); r ++)
{
for (int c = 0; c < this.getUpperBound(1); c++)
{
retVal += this[r,c];
if (c + 1 < this.getUpperBound(1))
{
retVal += columnSeparator;
}
}
if (r + 1 < this.getUpperBound(0))
{
retVal += rowSeparator;
}
}
return retVal;
}
答案 0 :(得分:5)
这不是覆盖任何内容 - 您正在尝试重载现有的ul
方法。这是一个很好的工作,你不是要覆盖任何东西,因为你基本上不能这样做 - 你只能覆盖类声明中的成员,你不能自己声明ToString
类。
您可以使用extension method:
来实现目标string[,]
请注意,调用者需要为包含public static class ArrayExtensions
{
public static string ToString(
this string[,] array, string rowSeparator, string columnSeparator)
{
// Code as per your method, but using array instead of this
}
}
的命名空间指定using
指令,或为ArrayExtensions
类本身指定using static
指令才能使用此指令作为一种延伸方法。
我还建议您在实施中使用ArrayExtensions
而不是repeated string concatenation。