好吧,这是比实际需求更好奇。有没有一种方法可以防止结构被检测或我可以有一个类将被复制?
比方说,我有这个类:
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)具有值语义平等比较时
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
基本上接近枚举的行为。我当然可以没有它,只是学习。
你的意思是短重写“等于”方法或类上的“==”操作符来执行,只要你想的比较? – 2013-02-19 15:02:32
@DavidW是的,这是可能的。但它仍然不会给类的价值类型语义,或换句话说我的要求1. – nawfal 2013-02-19 15:09:37