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
'ProgramingTip' 카테고리의 다른 글
외부 루프의 루프 고급 가져 오기 (0) | 2020.12.12 |
---|---|
JAR에 속성 파일을로드 하시겠습니까? (0) | 2020.12.12 |
무게를 제외하고 동일한 글꼴이 다른 브라우저에서 다르게 글꼴입니다. (0) | 2020.12.12 |
ASP.NET에 두 가지 호환되지 않는 세션 상태 유형이있는 이유는 무엇입니까? (0) | 2020.12.12 |
Windows 용 Sequel Pro 대안 (0) | 2020.12.12 |