C# 对象和类型(结构)

类和结构的区别

字段、属性和方法

按值和引用传送参数

方法重载

构造函数和静态构造函数

只读字段

Object类,其他类型都从该类派生而来

结构

如何将类保持在堆中,通过这种方式可以在数据的生存期上获得很大的灵活性,但性能会有一定的损失。因托管堆的优化,这种行了损失比较小。有时需要一个小的数据结构。类提供的功能多于需要的功能,由于性能的原因,最好使用结构。

复制代码
class Dimensions
{
    public double Length;

    public double Width;
}

结构的构造函数和属性:

复制代码
struct Dimensions
{
    public double Length;

    public double Width;

    Dimensions(double length,double width)
    {
        Length=length;
        Width=width;
    }

    public int Diagonal
    {
        {
            get
            {
                return Math.Sqrt(Length*Length+Width*Width);
            }
        }
    }
}

结构与类区别

区别:

①结构是值类型,不是引用类型。它们存储在堆栈中或存储为内联(inline)(如果它们是另一个对象的一部分,就会保存在堆中),其生存期的限制与简单的数据类型一样。

②结构不支持继承。

③结构的构造函数的工作方式有一些区别。尤其是编译器总是提供一个无参数的默认构造函数,这是不允许替换的。

结构是值类型

结构遵循其他数据类型都遵循的规则:在使用前所有的元素都必须进行初始化。在结构上调用new运算符,或者给所有的字段分别赋值,结构就可以初始化。

结构和继承

结构不是为继承设计的。不能从一个结构中继承,唯一的例外是结构(C#中的其他类型一样)派生于类System.Object。结构也可访问System.Object的方法。在结构中,可以重写System.Object中的方法------例如重写ToString()方法。结构的基础链是:每个结构派生于System.ValueType,System.ValueType派生于System.Object。ValueType并没有给Object添加任何新成员,但提供一些更适合结构的执行代码。注意:不能为结构提供其他基类:每个结构都派生于ValueType。

结构的构造函数

给结构定义构造函数不允许定义无参数的构造函数。可以给结构提供Close()Dispose()方法。

本文由mdnice多平台发布

相关推荐
yaoh.wang2 小时前
力扣(LeetCode) 28: 找出字符串中第一个匹配项的下标 - 解法思
python·程序人生·算法·leetcode·面试·职场和发展·跳槽
yaoh.wang2 小时前
力扣(LeetCode) 35: 搜索插入位置 - 解法思路
程序人生·算法·leetcode·面试·职场和发展·跳槽·二分搜索
小哈里3 小时前
【情感】程序人生之理想主义的情感希冀(个人背景、兴趣爱好、爱情观、理想的另一半、期待什么样的生活等)
程序人生·职场和发展·生活·感情·家与生活
郝学胜-神的一滴4 小时前
OpenGL中的glDrawArrays函数详解:从基础到实践
开发语言·c++·程序人生·算法·游戏程序·图形渲染
yaoh.wang13 小时前
力扣(LeetCode) 13: 罗马数字转整数 - 解法思路
python·程序人生·算法·leetcode·面试·职场和发展·跳槽
郝学胜-神的一滴17 小时前
Python数据模型:深入解析及其对Python生态的影响
开发语言·网络·python·程序人生·性能优化
yaoh.wang19 小时前
力扣(LeetCode) 14: 最长公共前缀 - 解法思路
python·程序人生·算法·leetcode·面试·职场和发展·跳槽
yaoh.wang1 天前
力扣(LeetCode) 9: 回文数 - 解法思路
python·程序人生·算法·leetcode·面试·职场和发展·跳槽
yuhaiqun19891 天前
新手练 C++ HTTP 服务实操:从 “拆请求头” 到 “发 HTML 响应”
c语言·c++·程序人生·http·html·学习方法·改行学it
小年糕是糕手1 天前
【C/C++刷题集】类和对象算法题(一)
数据结构·c++·程序人生·考研·算法·leetcode·改行学it