>백엔드 개발 >C++ >확장 메서드는 첫 번째 매개변수에 'ref' 수정자를 사용할 수 있나요?

확장 메서드는 첫 번째 매개변수에 'ref' 수정자를 사용할 수 있나요?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-07 17:02:40738검색

Can Extension Methods Use the `ref` Modifier for Their First Parameter?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.