好的,这比实际要求更具好奇心。
假设我有这个课程:
public sealed class Entity
{
int value;
Entity()
{
}
public static implicit operator Entity(int x)
{
return new Entity { value = x };
}
}
我不希望这个类在类之外实例化,这很有效。但是这里Entity
的 s 将被引用而不是像值类型一样被复制。这个类太小了,我希望它表现得像值类型。此外,如果我比较Entity
s 的两个实例,就像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) 在比较相等时具有值语义
Entity e1 = 1;
Entity e2 = 1;
e1.Equals(e2); // prints true
// this is easy though by overriding default equality.
3) 在类型范围之外不可实例化:
Entity e = new Entity(); // should not compile
基本上接近枚举的行为。我当然可以没有它,只是学习。