ProgramingTip

C #에서 할당 연산자 오버로딩

bestdevel 2020. 12. 12. 12:14
반응형

C #에서 할당 연산자 오버로딩


=연산자가 오버로드 될 수있는 것을 선택 하고 원하는 작업을 수행 할 것입니다.

나는 약간의 물리학을 수행하고 있기 때문에 양적 단위를 클래스 클래스를 만들 수 있습니다. 분명히 프리미티브에서 상속 할 수는 없지만 클래스가 프리미티브와 똑같이 동작하기를 원합니다.

그래서 갈 수있을 것입니다.

Velocity ms = 0;
ms = 17.4;
ms += 9.8;

기타

이 작업을 수행하는 방법을 잘 모르겠습니다. 나는 다음과 같은 클래스를 품고 생각했습니다.

class Power
{
    private Double Value { get; set; }

    //operator overloads for +, -, /, *, =, etc
}

그러나 분명히 할당 연산자를 오버로드 할 수 없습니다. 이 동작을 얻을 수있는 방법이 있습니까?


가 아닌 클래스 구조체 를 사용해야하는 것처럼 들리며 암시 적 CHAPTER 2 연산자와 추가 등을위한 다양한 연산자를 만들어야합니다.

다음은 몇 가지 샘플 코드입니다.

public struct Velocity
{
    private readonly double value;

    public Velocity(double value)
    {
        this.value = value;
    }

    public static implicit operator Velocity(double value)
    {
        return new Velocity(value);
    }

    public static Velocity operator +(Velocity first, Velocity second)
    {
        return new Velocity(first.value + second.value);
    }

    public static Velocity operator -(Velocity first, Velocity second)
    {
        return new Velocity(first.value - second.value);
    }

    // TODO: Overload == and !=, implement IEquatable<T>, override
    // Equals(object), GetHashCode and ToStrin
}

class Test
{
    static void Main()
    {
        Velocity ms = 0;
        ms = 17.4;
        // The statement below will perform a conversion of 9.8 to Velocity,
        // then call +(Velocity, Velocity)
        ms += 9.8;
    }
}

(부담으로 ... 나는 이것이 실제로 속도를 나타내는 방법을 알지 못합니다. 확실히 방향과 크기가 필요합니다.)


암시 적 변환 연산자를 만들 수 있습니다. 좋은 예가있는 MSDN 페이지 가 있습니다 .

불변 구조체로 만드는 것도 좋은 생각입니다. 그것이 바로 "원시적"이 무엇인지, 그것이 그들로부터 상속을 불가능하게 만드는 이유입니다. 참조 형식 의미 체계 대신 값 형식 의미 체계를 원하기 때문에 구조체를 원합니다. 그리고 변경 가능한 값 유형은 일반적으로 나쁜 생각 이기 때문에 불변을 원합니다 .


C # 클래스는 모두 Object에서 파생되어 기본적으로 개체이고 할당 연산자를 사용할 때 기본적으로 다른 개체를 참조하기 때문에 오버로드 할 수 없다고 생각합니다. 반면 구조를 사용하면 기본적으로 모든 정보가 필요하므로 = 연산자를 사용하면 모든 필드가 복사됩니다.

그래서 나는 그것을 직면하고 Copy ()라는 함수를 구현하고 당신은 괜찮을 것입니다 :-)

참고 URL : https://stackoverflow.com/questions/4537803/overloading-assignment-operator-in-c-sharp

반응형