3.5.cs
/*author:frankdatetime:2017-8-2 16:59:00结构:1.结构是值类型,不是引用类型。它们存储在栈中或存储为内联(inline),其生存期的限制于简单的数据类型一样。2.结构不支持继承,但是结构体是继承Object,也可以访问及重新Object里面的方法。结构的继承链是:每个结构派生自System.ValueType类,System.ValueType类又派生自System.Object。3.对于结构,构造函数的工作方式有一些区别。尤其是编译器总是提供一个无参数的默认构造战术,它是不允许替换的。由于结构是值类型,传递的时候是直接复制值,不使用的时候就会被立即删除,由于结构传递的时候是按值传递,所以数据较大的情况下传递就会影响性能,可以使用ref按引用传递,但是底层方法修改结构体中的数据也会影响到实际结构体中的值。结构体默认会有一个无参的构造函数,而且不允许替换,所以自己不能定义无参构造函数。*/using System;namespace Sample{ public class Program { public static void Main(string[] args) { Dimensions point = new Dimensions();//跟类不一样,如果是类的话用new就会在堆内存中开辟内存空间,结构只是调用构造函数而已。 point.Length = 3; point.Width = 6; Console.WriteLine(point.Diagonal); Dimensions point2;//不用new也行,构造函数只是初始化字段值。 point2.Length = 2; point2.Width = 5; Console.WriteLine(point2.Diagonal); } } //默认构造函数把数值字段都初始化为0,把引用类型字段初始化为null,且总是隐式的给出,即使提供了其他带参数的构造函数,也是如此。提供字段的初始值也不能绕过默认构造函数。 //也可以向类一样提供Close()方式及Dispose()方法。 public struct Dimensions { public double Length; //public double Length = 1;//编译错误的,不能预定义自己的值 public double Width; public Dimensions(double length,double width) { Length = length; Width = width; } public double Diagonal { get { return Math.Sqrt(Length * Length + Width * Width); } } }}