结构—C#基础回顾

原创
2017/08/02 18:07
阅读数 31

 3.5.cs

/*
author:frank
datetime: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);
			}
		}
	}

}

 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部