我对struct类型有所了解.但我无法理解:它是为了什么?我什么时候用它?类,简单的值类型和枚举 - 这就是我所需要的.
有什么建议?
UPD:请!不要告诉我结构在堆栈中(我知道这个:).什么结构用于?
jas*_*son 22
如果需要值类型语义,可以选择结构.如果需要引用类型语义,则选择一个类.所有其他问题都是次要问题.
MSDN提供了一个指南:在类和结构之间进行选择:
如果类型的实例很小并且通常是短暂的或者通常嵌入在其他对象中,则考虑定义结构而不是类.
除非类型具有以下所有特征,否则不要定义结构:
- 它在逻辑上表示单个值,类似于基本类型(整数,双精度,>等).
- 它的实例大小小于16个字节.
- 这是不可改变的.
- 它不必经常装箱.
应该是结构的东西(因为它们是值):
struct Colorstruct Pointstruct Rectanglestruct GLVertex (包含位置,颜色,法线和texcoord)struct DateTime应该是一个类的东西(因为它们是你所指的东西):
class RandomGeneratorclass Socketclass Threadclass Window为什么?请考虑以下代码.
class Button
{
    public Point Location { get; set; }
}
class Program
{
    public static void Main()
    {
        var button = Util.GetButtonFromSomewhere();
        var location = button.Location;
        Util.DrawText("one", location);
        location.Y += 50;
        Util.DrawText("two", location);
        location.Y += 50;
        Util.DrawText("three", location);
    }
}
这将绘制3个垂直对齐的文本标签.但是如果Point是一个类,这也会移动按钮,这是非常意外的:var location = button.Location感觉它应该复制一个值,而不是一个引用!换句话说,我们将Point视为值类型而不是引用类型.这里的"价值"用于数学意义上的价值.考虑数字5,它是一个抽象对象"在那里的某个地方",你只是"引用"它.同样,一个点就是.它不存在任何地方,我们不能改变它.因此我们选择将其作为结构,因此它具有用户期望的语义.
另一方面,我们可以class Button { public Window Parent { get; set; } }.这里Parent是一个实体,所以我们用引用类型来表示它 - Window.使用像这样的代码可能是有意义的myButton.Parent.Redraw();.所以Window应该是一个班级.
到现在为止还挺好.但这一切对你来说可能听起来太模糊了.你如何真正决定某些东西"感觉"像参考或价值?我的经验法则很简单:
该怎么Foo a = b; a.Mutate();办?