• 13
  • 13
分享
  • C#.Net中类与结构的区别——软件测试圈
  • 饭团🍙 2021-10-15 10:34:20 字数 1611 阅读 1200 收藏 13

一、类与结构的示例比较:

结构示例: 

public struct Person 
{ 
string Name; 
int height; 
int weight 
public bool overWeight() 
{ 
//implement something 
} 
}

类示例: 

public class TestTime 
{ 
int hours; 
int minutes; 
int seconds; 
public void passtime() 
{ 
//implementation of behavior 
} 
}

调用过程:

public class Test 
{ 
public static ovid Main 
{ 
Person Myperson=new Person //声明结构 
TestTime Mytime=New TestTime //声明类 
} 
}

从上面的例子中我们可以看到,类的声明和结构的声明非常类似,只是限定符后面是 struct 还是 class 的区别,而且使用时,定义新的结构和定义新的类的方法也非常类似。那么类和结构的具体区别是什么呢? 

二、类与结构的差别 

1. 值类型与引用类型 

结构是值类型:值类型在堆栈上分配地址,所有的基类型都是结构类型,例如:int 对应System.int32 结构,string 对应 system.string 结构 ,通过使用结构可以创建更多的值类型 

类是引用类型:引用类型在堆上分配地址 

堆栈的执行效率要比堆的执行效率高,可是堆栈的资源有限,不适合处理大的逻辑复杂的对象。所以结构处理作为基类型对待的小对象,而类处理某个商业逻辑 

因为结构是值类型所以结构之间的赋值可以创建新的结构,而类是引用类型,类之间的赋值只是复制引用 

注: 

  1. 虽然结构与类的类型不一样,可是他们的基类型都是对象(object),c#中所有类型的基类型都是object 

  2. 虽然结构的初始化也使用了New 操作符可是结构对象依然分配在堆栈上而不是堆上,如果不使用“新建”(new),那么在初始化所有字段之前,字段将保持未赋值状态,且对象不可用 

2.继承性 

结构:不能从另外一个结构或者类继承,本身也不能被继承,虽然结构没有明确的用sealed声明,可是结构是隐式的sealed . 

类:完全可扩展的,除非显示的声明sealed 否则类可以继承其他类和接口,自身也能被继承 

[NextPage]

注:虽然结构不能被继承 可是结构能够继承接口,方法和类继承接口一样 

例如:结构实现接口?

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

3.内部结构: 

结构: 

没有默认的构造函数,但是可以添加构造函数 

没有析构函数 

没有 abstract 和 sealed(因为不能继承) 

不能有protected 修饰符 

可以不使用new 初始化 

在结构中初始化实例字段是错误的 

类: 

有默认的构造函数 

有析构函数 

可以使用 abstract 和 sealed 

有protected 修饰符 

必须使用new 初始化 

三.如何选择结构还是类 

讨论了结构与类的相同之处和差别之后,下面讨论如何选择使用结构还是类:

1.堆栈的空间有限,对于大量的逻辑的对象,创建类要比创建结构好一些 

2.结构表示如点、矩形和颜色这样的轻量对象,例如,如果声明一个含有1000 个点对象的数组,

[NextPage]

则将为引用每个对象分配附加的内存。在此情况下,结构的成本较低。 

3.在表现抽象和多级别的对象层次时,类是最好的选择

4.大多数情况下该类型只是一些数据时,结构时最佳的选择 


作者:佚名

来源:百度文库

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 接口测试接口测试常用工具:postman,jmeter (现在主流的两个测试接口工具)接口分类 :把接口分为两类:程序接口和协议接口。程序接口,也可以看作是程序模块接口,具体到程序中一般就是提供了输入输出的类、方法或函数。 对于程序接口的测试,一般需要使用与开发程序接口相同的编程语言,通过不同的传入不同的参数,来验证 程序接口的功能。协议接口,一般指系统通过不同的协议来提供的接口,例如 HTTP/SOAP 协议等。这种类型接口对 底层代码做了封装,通过协议的方式对外提供调用。因为不涉及到程序层面,所以,不受编程语言的限制; 我们可以通过其它编程语言或工具对其进行测试。接口分类 :接口大体可以...
            12 13 2461
            分享
          • 在面试的时候,如果你透漏出你会接口测试,面试官往往会针对你会的接口测试问很多专业性的问题:所以在面试之前,还是要多多了解接口测试的相关知识到底什么是接口?一般来说接口有两种,一种是程序内部的接口,一种是系统对外的接口。广义来说,客户端与后台服务间的协议;插件间通信的接口;模块间的接口;再小到一个类提供的方法;都可以理解为接口系统对外的接口如果我们要从网站或服务器上获取资源或信息,网站肯定不会把数据库共享给你,它只会给你提供一个写好的方法来获取数据,我们通过引用它提供的接口就能获取数据程序内部的接口它是方法与方法之间,模块与模块之间的交互,也是程序内部抛出的接口。比如一个web项目,有登录、新增...
            0 0 1165
            分享
          •   对每个职场人士来说,当工作步入正轨,开始稳定下来,那么关于未来的职业发展就是首要考虑的问题。测试人员也不例外,每天忙于业务测试,接触到的核心技术会比较少,如果不能提升自己的职业技能,拥有自己的核心竞争力,那么对于未来的发展会有很大的限制。  说的稍微严重一点,如果觉得测试只是枯燥的“用鼠标点点点”的工作,那么职业发展可能很快就会遇到瓶颈,甚至还有被行业淘汰的可能!  每个行业,每个岗位,都有自己的发展方向,测试工程师必有他的价值。有时候觉得看不到未来,也可能只是是自己站的不够高。想要未来大有可为,就需要不断的学习,提升自己的专业技能,让自己达到一定高度,毕竟站的更高,才能看的更远。对此,小...
            0 0 661
            分享
          • 1. 什么是接口?API:ApplicationProgrammingInterface,即应用程序编程接口一个API中通常包含:Method:请求方法URL:唯一资源定位符Params:参数Authorization:认证方式Headers:消息头Body:消息体2. 接口类型httpapi接口走http协议,通过路径来区分调用的方法,请求报文都是key-value形式的,返回报文一般都是json串,有get和post等方法,这也是最常用的两种请求方式。API接口一般又分为两种:程序内部的接口和系统对外的接口json是一种通用的数据类型,所有的语言都认识它。(json的本质是字符串,他与其他...
            0 0 1334
            分享
      • 51testing软件测试圈微信