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

  结构示例:

     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 否则类可以继承其他类和接口,自身也能被继承

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

  例如:结构实现接口

  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 个

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

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

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

C# 之 Structure 和 Class的区别的更多相关文章

  1. ABAP面试经历【转http://blog.csdn.net/tsj19881202/article/details/8792742】

    本周三面试了一次HP的globe部门,整个过程自己感觉特别糟糕.总结了一下经验, 1.不能把自己平时做的东西,很好的用语言描述出来 2.技术点其实都会,但是不了解对方问题的意思,所以没能很好的回答对方 ...

  2. VB.NET 结构(Structure)和类(Class)的区别

    类是我们用来构造 VB.NET 应用程序时的最基本的编程结构了. 那结构与类有什么相似之处与不同之处呢? 结构和类, 相同之处是都含有成员,包括构造函数.方法.属性.字段.常量.枚举和事件,都可以实现 ...

  3. [LeetCode] Add and Search Word - Data structure design 添加和查找单词-数据结构设计

    Design a data structure that supports the following two operations: void addWord(word) bool search(w ...

  4. [LeetCode] Two Sum III - Data structure design 两数之和之三 - 数据结构设计

    Design and implement a TwoSum class. It should support the following operations:add and find. add - ...

  5. Delphi的分配及释放---New/Dispose, GetMem/FreeMem及其它函数的区别与相同

    转载自:http://www.cnblogs.com/qiusl/p/4028437.html?utm_source=tuicool 我估摸着内存分配+释放是个基础的函数,有些人可能没注意此类函数或细 ...

  6. ABAP工作区,内表,标题行的定义和区别

         工作区域跟变量一样,是用来保存数据的.区别是变量只能从中保存一个数据.而工作区域可以存放多个.把多个数据合在一起就成工作区域了.下面我们来看看工作区域是如何定义的吧.定义有四种方法,如下:1 ...

  7. redis与memcache的区别2

    总结一: memcache官方定义 Free & open source, high-performance, distributed memory object caching system ...

  8. C#编程利器之二:结构与枚举(Structure and enumeration)【转】

    C#编程利器之二:结构与枚举(Structure and enumeration) 在上一篇文章中,介绍了类如何封装程序中的对象.而实际中,出了类可以封装对象外,结构和枚举也可以封装一些对象,本文将着 ...

  9. [转]第四章 使用OpenCV探测来至运动的结构——Chapter 4:Exploring Structure from Motion Using OpenCV

    仅供参考,还未运行程序,理解部分有误,请参考英文原版. 绿色部分非文章内容,是个人理解. 转载请注明:http://blog.csdn.net/raby_gyl/article/details/174 ...

随机推荐

  1. 游记-NOIP2018

    Day -3 受蛊惑跑到理工大去试机,意外发现home里的noilinux账户下有个压缩包,而且还试对了密码,怀着 激动 紧张的心情,打开来看,里面写着 (写出来我就会被禁赛了): asdfasdra ...

  2. ubuntu 安装 wireshark

    1.添加 wireshark 源 sudo apt-add-repository ppa:wireshark-dev/stable 2.更新    sudo apt-get update 3.安装 w ...

  3. MySQL的information_schema

    在一次清空一张比较大的表时(在清空前占用400多兆),发现该表中记录为0条但是空间并没有被释放,采用下面方式可查看占用情况 -- 查询各个数据库占用磁盘的情况 ,),' MB') as data_si ...

  4. 39)django-XSS 过滤

    使用kingedit别人是可以输入script代码.这在后台是不允许script代码运行的. 这里主要使用beatifulSoup过滤 示例1 beatufulsoup4 from bs4 impor ...

  5. chrome调试工具怎么限制网速

    在做项目的时候,我们测试的时候有时需要限制网速

  6. vue 轮播图插件 vue-awesome-swiper

    1.npm安装 npm install vue-awesome-swiper --save 2.vue 引入 //在main.js 中全局引入 import VueAwesomeSwiper from ...

  7. 学习promise

    总概括 promise是js异步编程的一种解决方案 我对promise的认识(通俗):给一个承诺promise,如果未来发生的事情(异步操作)是符合满足相应条件,则接受resolve,否则失败reje ...

  8. 2018谷歌I/O开发者大会8大看点汇总 新品有哪些

    2018谷歌I/O开发者大会8大看点汇总 新品有哪些美国科技媒体The Verge近日撰文,列举了在即将召开的2018年谷歌I/O开发者大会上的8大看点,包括Android P.人工智能等等. 以下为 ...

  9. C语言学习及应用笔记之一:C运算符优先级及使用问题

    C语言中的运算符绝对是C语言学习和使用的一个难点,因为在2011版的标准中,C语言的运算符的数量超过40个,甚至比关键字的数量还要多.这些运算符有单目运算符.双目运算符以及三目运算符,又涉及到左结合和 ...

  10. Confluence 6 配置 Office 转换器

    Office 连接器(Office Connector)允许 Confluence 用户能够查看和编辑从 Microsoft Office 和 Open Office 中导入并附加到页面的内容. Of ...