C# 程序员参考--结构教程(转)

本文介绍了结构和类在.NET中的区别,包括它们的语法、用法和特性。文章通过示例展示了结构是值类型并存储在堆栈上,而类是引用类型并存储在堆上。此外还讲解了结构和类在实例化、构造函数、继承等方面的不同。

本教程介绍结构的语法和用法。它还涉及类与结构之间的重大差异。

示例文件

请参见“结构”示例以下载和生成本教程中讨论的示例文件。

教程

此教程包括两个示例。第一个示例向您展示如何声明和使用结构,而第二个示例演示向方法传递实例时结构和类之间的差异。还向您介绍下列主题:

  • 结构与类
  • 堆还是堆栈?
  • 构造函数和继承
  • 结构上的属性
示例 1

本示例声明一个结构,它有三个成员:一个属性、一个方法和一个私有字段。本示例创建该结构的一个实例,并将其投入使用:

// struct1.csusing System;struct SimpleStruct{    private int xval;    public int X    {        get         {            return xval;        }        set         {            if (value < 100)                xval = value;        }    }    public void DisplayX()    {        Console.WriteLine("The stored value is: {0}", xval);    }}class TestClass{    public static void Main()    {        SimpleStruct ss = new SimpleStruct();        ss.X = 5;        ss.DisplayX();    }}
输出
The stored value is: 5

结构与类

结构可能看似类,但存在一些重要差异,应引起注意。首先,类为引用类型,而结构为值类型。使用结构,您可以创建行为类似内置类型的对象,同时享有它们的好处。

堆还是堆栈?

在类上调用“新建”(New) 运算符时,它将在堆上进行分配。但是,当实例化结构时,将在堆栈上创建结构。这样将产生性能增益。而且,您不会像对待类那样处理对结构实例的引用。您将直接对结构实例进行操作。鉴于此原因,向方法传递结构时,结构将通过值传递,而不是作为引用传递。

示例 2

本示例展示当向方法传递结构时,将传递该结构的副本,而传递类实例时,将传递一个引用。

// struct2.csusing System;class TheClass{    public int x;}struct TheStruct{    public int x;}class TestClass{    public static void structtaker(TheStruct s)    {        s.x = 5;    }    public static void classtaker(TheClass c)    {        c.x = 5;    }    public static void Main()    {        TheStruct a = new TheStruct();        TheClass b = new TheClass();        a.x = 1;        b.x = 1;        structtaker(a);        classtaker(b);        Console.WriteLine("a.x = {0}", a.x);        Console.WriteLine("b.x = {0}", b.x);    }}
输出
a.x = 1b.x = 5
代码讨论

本示例的输出表明:当向 classtaker 方法传递类实例时,只更改了类字段的值。但是向 structtaker 方法传递结构实例并不更改结构字段。这是因为向 structtaker 方法传递的是结构的副本,而向 classtaker 方法传递的是对类的引用。

构造函数和继承

结构可以声明构造函数,但它们必须带参数。声明结构的默认(无参数)构造函数是错误的。结构成员不能有初始值设定项。总是提供默认构造函数以将结构成员初始化为它们的默认值。

使用 New 运算符创建结构对象时,将创建该结构对象,并且调用适当的构造函数。与类不同的是,结构的实例化可以不使用 New 运算符。如果不使用“新建”(new),那么在初始化所有字段之前,字段将保持未赋值状态,且对象不可用。

对于结构,不像类那样存在继承。一个结构不能从另一个结构或类继承,而且不能作为一个类的基。但是,结构从基类对象继承。结构可实现接口,而且实现方式与类实现接口的方式完全相同。以下是结构实现接口的代码片段:

interface IImage{    void Paint();}struct Picture : IImage{    public void Paint()    {         // painting code goes here    }    private int x, y, z;  // other struct members}

结构上的属性

通过使用属性可以自定义结构在内存中的布局方式。例如,可以使用 StructLayout(LayoutKind.Explicit)FieldOffset 属性创建在 C/C++ 中称为联合的布局方式。

using System.Runtime.InteropServices;[StructLayout(LayoutKind.Explicit)]struct TestUnion {    [FieldOffset(0)]     public int i;    [FieldOffset(0)]     public double d;    [FieldOffset(0)]     public char c;    [FieldOffset(0)]     public byte b1;}

在上一个代码段中,TestUnion 的所有字段都从内存中的同一位置开始。

以下是字段从其他显式设置的位置开始的另一个示例:

using System.Runtime.InteropServices;[StructLayout(LayoutKind.Explicit)]struct TestExplicit {    [FieldOffset(0)]     public long lg;    [FieldOffset(0)]     public int i1;    [FieldOffset(4)]     public int i2;    [FieldOffset(8)]     public double d;    [FieldOffset(12)]     public char c;    [FieldOffset(14)]     public byte b1;}

i1i2 这两个 int 字段共享与 lg 相同的内存位置。使用平台调用时,这种结构布局控制很有用。

结束语

结构使用简单,并且有时证明很有用。但要牢记:结构在堆栈中创建,并且您不是处理对结构的引用,而是直接处理结构。每当需要一种将经常使用的类型,而且大多数情况下该类型只是一些数据时,结构可能是最佳选择。

[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8781179/viewspace-924143/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/8781179/viewspace-924143/

潮汐研究作为海洋科学的关键分支,融合了物理海洋学、地理信息系统及水利工程等多领域知识。TMD2.05.zip是一套基于MATLAB环境开发的潮汐专用分析工具集,为科研人员与工程实践者提供系统化的潮汐建模与计算支持。该工具箱通过模块化设计实现了两大核心功能: 在交互界面设计方面,工具箱构建了图形化操作环境,有效降低了非专业用户的操作门槛。通过预设参数输入模块(涵盖地理坐标、时间序列、测站数据等),用户可自主配置模型运行条件。界面集成数据加载、参数调整、可视化呈现及流程控制等标准化组件,将复杂的数值运算过程化为可交互的操作流程。 在潮汐预测模块中,工具箱整合了谐波分解法与潮流要素解析法等数学模型。这些算法能够解构潮汐观测数据,识别关键影响要素(包括K1、O1、M2等核心分潮),并生成不同时间尺度的潮汐预报。基于这些模型,研究者可精准推算特定海域的潮位变化周期与振幅特征,为海洋工程建设、港湾规划设计及海洋生态研究提供定量依据。 该工具集在实践中的应用方向包括: - **潮汐动力解析**:通过多站点观测数据比对,揭示区域主导潮汐成分的时空分布规律 - **数值模型构建**:基于历史观测序列建立潮汐动力学模型,实现潮汐现象的数字化重构与预测 - **工程影响量化**:在海岸开发项目中评估人工构筑物对自然潮汐节律的扰动效应 - **极端事件模拟**:建立风暴潮与天文潮耦合模型,提升海洋灾害预警的时空精度 工具箱以"TMD"为主程序包,内含完整的函数库与示例脚本。用户部署后可通过MATLAB平台调用相关模块,参照技术文档完成全流程操作。这套工具集将专业计算能力与人性化操作界面有机结合,形成了从数据输入到成果输出的完整研究链条,显著提升了潮汐研究的工程适用性与科研效率。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值