您的位置:首页 > 编程语言 > C#

结构—C#基础回顾

2017-08-02 00:00 447 查看
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);
}
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: