使自定义类实例在operator =上重新实例化是可能的

本文关键字:实例化 自定义 实例 operator | 更新日期: 2023-09-27 17:51:08

我有一个这样的代码:

public static IEnumerable<IntEx> FibbonacciNumbersStr()
{
    IntEx j = 0;
    IntEx i = 1;
    for (Int64 k = 0; k < Int64.MaxValue; k++)
    {
        yield return j;
        IntEx oldi = i;
        i = i+j;
        j = oldi;
    }
}

IntEx是一个自定义的'int'类,能够计算巨大的数字,并将它们写为任何给定基数的字符串,这里的问题是,当我说IntEx oldi = I时,oldi将是指向I的指针,最终没有达到其目的,(从而使斐波那契序列完全错误)。如果我做

public static IEnumerable<IntEx> FibbonacciNumbersStr()
{
    IntEx j = 0;
    IntEx i = 1;
    for (Int64 k = 0; k < Int64.MaxValue; k++)
    {
        yield return j;
        IntEx oldi = new IntEx(i);
        i = i+j;
        j = oldi;
    }
}

效果很好。

是否有任何方法可以使用简单的=操作符来重新实例化而不是指向,从而更好地模仿Int64或其他东西的行为来获得第二个结果?我的意思是,这里的重点是我可能最终想要分发这个代码给其他人使用,他们可能最终会有"指向而不是一个新的值"的问题,当使用IntEx类-_-

任何想法?

使自定义类实例在operator =上重新实例化是可能的

在c#中没有办法覆盖=行为。如果IntExclass类型,则赋值将始终导致LHS引用与RHS相同的值。

在一定程度上可以通过在方程中插入struct来求解。在struct赋值中,字段在LHSRHS之间按成员方式复制。它仍然不能自定义,但可以确保值

之间有一定的分隔

你总是可以创建一个静态方法来设置一个值。

因此这个解决方案是可行的。

IntEx.SetValue(i);

或者让IntEx产生实例,而不是通过创建new,而是创建一个静态方法。

IntEx.CreateInstance(i);