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

时间:2014-03-21 03:41:27

标签: c# instantiation assignment-operator

我有这样的代码:

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是一个定制的&#39; int&#39;类能够计算巨大的数字并将它们写成任何给定数字基数的字符串,这里的问题是,当我说IntEx oldi = i时,oldi将成为我的指针并最终没有达到其目的,(因此使得斐波那契序列完全错了。如果我这样做,那么

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;
    }
}

效果很好。

有没有办法可以使用simple =运算符来重新实现第二个结果而不是指向,从而更好地模仿Int64的行为或其他什么? 我的意思是,这里的重点是我可能最终想要将这些代码分发给其他人一起工作,他们可能最终会指出这一点而不是一个新的价值。使用IntEx类时出现问题-_-

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

无法覆盖C#中的=行为。如果IntExclass类型,则赋值将始终使LHS引用与RHS相同的值。

这可以通过在等式中插入struct来解决。在struct分配中,字段在LHSRHS之间按成员身份进行复制。它仍然无法定制,但确保了值的分离

答案 1 :(得分:0)

您始终可以创建静态方法来设置值。

因此,这种解决方案可行。

IntEx.SetValue(i);

或使IntEx生成实例不是通过创建新的实例,而是为它创建一个静态方法。

IntEx.CreateInstance(i);