ref
수식자를 사용한 확장 방법
확장 메서드에서는 첫 번째 매개변수(보통 this
매개변수라고 함)에 ref
수정자를 사용하는 것이 금지됩니다. 주요 이유는 다음과 같습니다.
C# 언어 디자인 원칙과 호환되지 않음:
확장 메소드는 원래 유형을 수정하지 않고 상속할 수 있는 방법을 제공하도록 설계되었습니다. 첫 번째 인수에 ref
을 허용하면 원본 인스턴스를 직접 수정할 수 있으므로 이 원칙을 위반하게 됩니다.
잠재적인 유형 안전 문제:
첫 번째 매개변수를 통해 값 유형(구조체)을 참조로 전달하면 메서드가 정적 클래스에 선언된 경우에도 확장 메서드가 원래 인스턴스를 수정할 수 있습니다. 이로 인해 불일치가 발생하고 예상치 못한 동작이 발생할 수 있습니다.
단, C# 7.2 이상에서는
확장 메서드의 첫 번째 인수에 ref
을 사용할 수 있도록 C# 언어 사양이 업데이트되었습니다. 이 기능은 값 유형(구조체)으로 제한되며 원본 인스턴스의 수정을 허용합니다. 이 기능은 참조 유형(클래스, 인터페이스, 레코드)에서는 작동하지 않는다는 점은 주목할 가치가 있습니다.
예:
다음 예에서는 확장 메서드 내에서 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 = "来自MyExtensions的问候"; } } public class MyClass { public MyClass() { MyProperties myProperties = new MyProperties(); myProperties.MyValue = "你好,世界"; myProperties.ChangeMyValue(); //调用扩展方法修改值 } }</code>
이 예에서 ChangeMyValue
확장 메소드는 값 유형인 원래 MyProperties
인스턴스의 MyValue
속성을 수정합니다. ref
을 사용하면 메서드가 인스턴스에 직접 액세스하여 상태를 변경할 수 있습니다.
위 내용은 확장 메서드는 첫 번째 매개변수에 'ref' 수정자를 사용할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!