C# 扩展方法中的 ref 和 out 修饰符
在扩展引用类型的扩展方法中,第一个参数不能使用 ref
或 out
修饰符。然而,从 C# 7.2 开始,可以为扩展值类型(结构体)的扩展方法的第一个参数添加 ref
修饰符。
此限制的原因是扩展方法的第一个参数被视为接收器参数,它表示被扩展的实例。对于引用类型,接收器参数始终通过引用传递,因此使用 ref
或 out
修饰符是多余的。
但是,对于值类型,接收器参数是按值传递的,这意味着在扩展方法中对其进行的任何更改都不会反映在原始值类型实例中。通过使用 ref
修饰符,可以按引用传递值类型实例,从而允许您在扩展方法中修改其状态。
示例:
<code class="language-csharp">public struct MyProperties { public string MyValue { get; set; } } public static class MyExtensions { public static void ChangeMyValue(this ref MyProperties myProperties) { myProperties.MyValue = "hello from MyExtensions"; } } public class MyClass { public MyClass() { MyProperties myProperties = new MyProperties(); myProperties.MyValue = "hello world"; myProperties.ChangeMyValue(); // Now modifies the original myProperties instance } }</code>
在此示例中,ChangeMyValue
扩展方法可以使用 ref
修饰符修改 MyProperties
值类型实例的状态。 需要注意的是,out
修饰符仍然无法用于扩展方法的第一个参数。
以上是Ref 和 Out 修饰符可以在 C# 扩展方法中使用吗?的详细内容。更多信息请关注PHP中文网其他相关文章!