C#用扩展方法改变一个值
发布时间:2020-12-15 19:26:43 所属栏目:百科 来源:网络整理
导读:如果我有以下扩展方法: internal static class Extensions{ public static void Increase(this uint value) { value += 1; } public static void Decrease(this uint value) { if (value 0) value -= 1; }} 为什么这不会导致i变为1? uint i = 0;i.Increase
如果我有以下扩展方法:
internal static class Extensions { public static void Increase(this uint value) { value += 1; } public static void Decrease(this uint value) { if (value > 0) value -= 1; } } 为什么这不会导致i变为1? uint i = 0; i.Increase(); 解决方法
参数是通过值传递的,这就是全部.这方面的扩展方法没什么特别之处.它相当于:
Extensions.Increase(i); 您需要使用该方法通过引用(使用ref)传递第一个参数,以使其具有任何效果……并且无论如何都禁止使用扩展方法. 因此,虽然您可以编写一个方法,允许您将其称为: Extensions.Increase(ref i); 你将无法成为一种扩展方法. 另一种方法是使方法返回一个值,此时您可以: i = i.Increase(); 如果您不完全清楚传递引用和传值值语义,那么您可能需要阅读我的article on the topic. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |