首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

对于int型数组会重载运算符吗

2014-05-11 
对于int型数组能重载运算符吗?能的话,A类写了A类里面就能实现两个数组相加吗?有个错误是二元运算符的参数

对于int型数组能重载运算符吗?
能的话,A类写了  A类里面就能实现两个数组相加吗?

有个错误是二元运算符的参数之一必须是包含类型
[解决办法]
好像是只能在自己写的类里面写重载吧,所以请参考如下示例:
把 int[] 用其他的类包装一下再计算。

public class iii
{
    public static implicit operator int(iii x)
    {
        return 0;
    }
    public static implicit operator iii(int x)
    {
        return null;
    }
    public static int operator +(int aa, iii bb)    
    {
        return 0;
    }
}

[解决办法]
public class IntArray
{
    public static implicit operator int[](IntArray x)
    {
        return x.data;
    }
    public static implicit operator IntArray(int[] data)
    {
        return new IntArray(data);
    }
    int[] data;
    public IntArray(int[] data) { this.data = data; }

    /// <summary>
    /// 两个int型数组相加
    /// </summary>
    /// <param name="arr1"></param>
    /// <param name="arr2"></param>
    /// <returns></returns>
    public static IntArray operator +(int[] arr1, IntArray arr)
    {
        //int[] arr1 = arr;
        int[] arr2 = arr;
        for (int i = 0; i < arr2.Length; i++)
        {
            arr1[i] += arr2[i];
            if (arr1[i] > 9)
            {
                int sign = i;
                do
                {
                    arr1[sign + 1] += arr1[sign] / 10;
                    arr1[sign] = arr1[sign] % 10;
                    sign += 1;
                } while (arr1[sign] > 9);
            }
        }
        return arr1;
    }
}

热点排行