使自定义类实例在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类-_-
任何想法?
在c#中没有办法覆盖=
行为。如果IntEx
是class
类型,则赋值将始终导致LHS引用与RHS相同的值。
在一定程度上可以通过在方程中插入struct
来求解。在struct
赋值中,字段在LHS
和RHS
之间按成员方式复制。它仍然不能自定义,但可以确保值
你总是可以创建一个静态方法来设置一个值。
因此这个解决方案是可行的。
IntEx.SetValue(i);
或者让IntEx产生实例,而不是通过创建new,而是创建一个静态方法。
IntEx.CreateInstance(i);