C#中的值类型类定义?

ala*_*ere 1 c# struct types reference

是否可以创建一个不是结构但是值类型的类,或者像一个值类型,因为它在传递时复制而不是通过引用传递.

编辑:

很抱歉在被问到后需要编辑的问题.

另外,请参阅此问题以获取更多信息. 在不存在的结构布局中循环

pho*_*oog 6

编辑2

现在看来,您正在寻找使用class关键字声明一个真值类型,根据定义,这是不可能的.


因为您正在考虑创建一个类似于System.String的语义类,所以您应该反编译System.String.它的很多魔力隐藏在CLR中,但你将看到的很多东西都会有所帮助.

对于初学者来说,你一定会需要重载==!=,并覆盖Equals()GetHashCode().你几乎肯定要实现IComparable<T>IEquatable<T>为好.

字符串的另一个重要方面是它们是不可变的.这是它们类似值的行为的重要部分,因为它保证两个相等的字符串始终相等.如果字符串是可变的,则可以修改其中一个字符串以使其与另一个字符串不相等.

我还应该指出,虽然字符串具有使其看起来像值类型的语义,但它当然是引用类型,并且引用语义的某些方面是不可避免的.

如果您再发布一些关于为什么要这样做的内容,我们可以提供更具体的建议.

编辑

为了回应您的编辑,您似乎对字符串有误解.虽然它们在某些方面的行为类似于值类型,但它们不会在每次传递给方法时通过复制数据直接传递. 实现这一目标的唯一方法是声明一个struct.与所有类一样,字符串是只能通过引用访问的引用类型; 你只能直接操纵参考; 您只能将引用传递给方法.