类(class)和结构体(struct)的区别

先了解一下什么叫类?

类(Class)是面向对象程序设计实现信息封装的基础。类是一种用户定义类型,也称类类型。每个类包含数据说明和一组操作数据或传递消息的函数。类的实例称为对象。类是面向对象程序设计中的概念,是面向对象编程的基础。类的实质是一种数据类型,类似于int、char等基本类型,不同的是它是一种复杂的数据类型。因为它的本质是类型,而不是数据,所以不存在于内存中,不能被直接操作,只有被实例化为对象时,才会变得可操作。类是对现实生活中一类具有共同特征的事物的抽象。如果一个程序里提供的类型与应用中的概念有直接的对应,这个程序就会更容易理解,也更容易修改。一组经过很好选择的用户定义的类会使程序更简洁。此外,它还能使各种形式的代码分析更容易进行。特别地,它还会使编译器有可能检查对象的非法使用。类的内部封装了方法,用于操作自身的成员。类是对某种对象的定义,具有行为(be-havior),它描述一个对象能够做什么以及做的方法(method),它们是可以对这个对象进行操作的程序和过程。它包含有关对象行为方式的信息,包括它的名称、方法、属性和事件。类的构成包括数据成员和成员函数。数据成员对应类的属性,类的数据成员也是一种数据类型,并不需要分配内存。成员函数则用于操作类的各项属性,是一个类具有的特有的操作,比如“人”可以“上课”,而“水果”则不能。类和外界发生交互的操作称为接口。
定义类:
class类名
{
public: 公有成员
private: 私有成员
protected: 保护成员
};

先了解一下什么叫结构体?

在C#中,结构体是值类型数据结构。它使得一个单一变量可以存储各种数据类型的相关数据。struct 关键字用于创建结构体。结构体是用来代表一个记录。假设您想跟踪图书馆中书的动态。您可能想跟踪每本书的以下属性:
 Title
 Author
 Subject
 Book ID
定义结构体:定义一个结构体,您必须使用 struct 语句。struct 语句为程序定义了一个带有多个成员的新的数据类型,格式如下:
struct Books
{
public string title;
public string author;
public string subject;
public int book_id;
};
类和结构体的区别主要有以下几点:
1、 在 Swift 中,类是引用类型,结构体是值类型。值类型在传递和赋值时将进行复制,而引用类型则只会使用引用对象的一个"指向"。所以他们两者之间的区别就是两个类型的区别。
2、 在内存中,引用类型诸如类是在堆上,而值类型诸如结构体实在栈上进行存储和操作。相比于栈上的操作,堆上的操作更加复杂耗时,所以一些官方推荐使用结构体,这样可以提高程序运行的效率。
3、 类可以被继承,而结构体不能被继续;
4、 结构体只能封装属性,而类不仅可以封装属性还可以封装方法;
5、 类的声明和结构的声明非常类似,只是限定符后面是 struct 还是 class 的区别;
6、 结构体与类的类型不一样,可是他们的基类型都是对象(object),c#中所有类型的基类型都是object;
7、 虽然结构体的初始化也使用了New 操作符可是结构对象依然分配在堆栈上而不是堆上,如果不使用“新建”(new),那么在初始化所有字段之前,字段将保持未赋值状态,且对象不可用;
8、 内部结构:
 结构体:没有默认的构造函数,但是可以添加构造函数 没有析构函数 没有 abstract 和 sealed(因为不能继承) 不能有protected 修饰符 可以不使用new 初始化在结构中初始化实例字段是错误的;
 类: 有默认的构造函数 有析构函数 可以使用 abstract 和 sealed 有protected 修饰符 必须使用new 初始化
最后一点就是该如何选择使用类和结构体?记住这几点
1、 堆栈的空间有限,对于大量的逻辑的对象,创建类要比创建结构好一些;
2、 结构表示如点、矩形和颜色这样的轻量对象,例如,如果声明一个含有 1000 个点对象的数组,则将为引用每个对象分配附加的内存。在此情况下,结构的成本较低。
3、 在表现抽象和多级别的对象层次时,类是最好的选择;
4、 大多数情况下该类型只是一些数据时,结构时最佳的选择;

  • 10
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值