什么时候应该使用结构而不是类?

MSDN说,当你需要轻量级对象时,你应该使用结构。 当一个结构比一个类更可取时,还有其他场景吗?

编辑:
有些人忘记了:
1.结构可以有方法!
2.结构没有继承能力。

另一个编辑:
我了解技术上的差异,我只是没有很好的感觉,因为什么时候使用结构。


MSDN有答案:在类和结构之间选择。

基本上,该页面为您提供了一个4项清单,并表示要使用一个班级,除非您的类型符合所有条件。

除非类型具有以下所有特征,否则不要定义结构:

  • 它在逻辑上代表一个单值,类似于原始类型(整数,双精度等)。
  • 它的实例大小小于16个字节。
  • 它是不可变的。
  • 它不会经常被装箱。

  • 我很惊讶,我没有读过任何以前的答案,我认为这是最关键的方面:

    当我想要一个没有身份的类型时,我使用结构。 例如3D点:

    public struct ThreeDimensionalPoint
    {
        public readonly int X, Y, Z;
        public ThreeDimensionalPoint(int x, int y, int z)
        {
            this.X = x;
            this.Y = y;
            this.Z = z;
        }
    
        public override string ToString()
        {
            return "(X=" + this.X + ", Y=" + this.Y + ", Z=" + this.Z + ")";
        }
    
        public override int GetHashCode()
        {
            return (this.X + 2) ^ (this.Y + 2) ^ (this.Z + 2);
        }
    
        public override bool Equals(object obj)
        {
            if (!(obj is ThreeDimensionalPoint))
                return false;
            ThreeDimensionalPoint other = (ThreeDimensionalPoint)obj;
            return this == other;
        }
    
        public static bool operator ==(ThreeDimensionalPoint p1, ThreeDimensionalPoint p2)
        {
            return p1.X == p2.X && p1.Y == p2.Y && p1.Z == p2.Z;
        }
    
        public static bool operator !=(ThreeDimensionalPoint p1, ThreeDimensionalPoint p2)
        {
            return !(p1 == p2);
        }
    }
    

    如果你有这个结构的两个实例,你不关心它们是内存中的单个数据还是两个。 你只关心他们所持有的价值。


    Bill Wagner在他的书“effective c#”中有关于此的一章(http://www.amazon.com/Effective-Specific-Ways-Improve-Your/dp/0321245660)。 他通过使用以下原则得出结论:

  • 类型数据存储的主要责任是什么?
  • 其公共接口是否完全由访问或修改其数据成员的属性定义?
  • 你确定你的类型永远不会有子类吗?
  • 你确定你的类型永远不会被多态处理吗?
  • 如果你对所有4个问题回答“是”:使用一个结构。 否则,请使用课程。

    链接地址: http://www.djcxy.com/p/82801.html

    上一篇: When should I use a struct instead of a class?

    下一篇: on stack or heap