좋습니다. 이것은 실제 요구 사항보다 더 많은 호기심입니다.struct가 구조화되는 것을 방지 할 수있는 방법이 있습니까? 아니면 복사 할 클래스를 가질 수 있습니까?
의 내가이 클래스가 있다고 가정 해 봅시다 :이 클래스는 클래스 외부 인스턴스화이 작동하지 않을
public sealed class Entity
{
int value;
Entity()
{
}
public static implicit operator Entity(int x)
{
return new Entity { value = x };
}
}
. 하지만 여기서 Entity
은 참조되고 값 유형처럼 복사되지 않습니다. 이 클래스는 너무 작아서 좋아하는 값 유형을 사용하기를 원합니다. 또한 Entity
의 두 인스턴스를 e1 == e2
과 비교하면 참조 평등을 부여 할 수 있습니다. (그래도 ==
을 오버로드 할 수 있지만 더 많은 작업이 필요합니다.)
public struct Entity
{
int value;
public static implicit operator Entity(int x)
{
return new Entity { value = x };
}
}
을하지만 지금은 사람이 쉽게 new Entity()
을 수행 할 수 있습니다 그래서 그것을 구조체를 만들 것입니다.
내 질문이 나는 타입 (구조체/클래스) 있음을 가질 수있는 방법
1)
Entity e1 = 1;
Entity e2 = e1;
ReferenceEquals(e1, e2); // prints false, just like any value type
2) 값을 가지고 있도록 값에 액세스 할 때마다 복사됩니다
01 : 어떤지를 비교했을 때 의미가Entity e1 = 1;
Entity e2 = 1;
e1.Equals(e2); // prints true
// this is easy though by overriding default equality.
3) 형식의 범위 밖 인스턴스화되지
기본적으로 enum의 동작에 가깝습니다. 나는 그것을 배우지 않고 살 수 있습니다.
"Equals"메서드 또는 "=="연산자를 재정의하여 원하는 비교를 수행하지 못한다는 의미입니까? –
@DavidW 예, 가능합니다. 하지만 여전히 클래스, 또는 즉 내 요구 사항 1에 대한 값 형식 의미를 부여 wouldnt. – nawfal