C#学习之结构与类的区别

区别

最近有看到网上面试题提到结构鱼类的区别,遂查看了msdn以及一些网上的资料总结了一下,一做学习之用 C#学习之结构与类的区别数据结构和类实际上都是创建对象的模版,每个对象都包含数据,并提供了处理和访问数据的方法。在语法上,非常相似,主要是使用关键字的区别。对于类和结构,都是使用关键字new来声明实例:这个关键字对象创建对象,并对其进行初始化。 1、值类型和引用类型结构是指类型,指类型在堆栈(栈)上分配地址,C#中的所有基类型都是结构类型(例如:int对应System.Int32结构);类是引用类型,引用类型是在堆上分配地址;堆栈的执行效率要比堆的执行效率高,可是堆栈的资源有限,不适合处理大的逻辑复杂的对象。所以结构处理作为基类型对待的小对象,而类处理某个商业逻辑;因为结构是值类型所以结构之间的赋值可以创建新的结构,而类是引用类型,类之间的赋值只是复制引用;(所以在以结构为参数传递时,最好使用ref,这样只传递地址引用,能够提高效率,同时也应注意这样结构的值也会随着方法调用而改变)关于堆和堆栈的比较参见http://blog.csdn.net/fengziyoyo/archive/2006/12/28/1465761.aspx。注:
  a.虽然结构与类的类型不一样,可是他们的基类型都是对象(object),c#中所有类型的基类型都是objectb.虽然结构的初始化使用了New操作符,可是结构对象依然分配在堆栈上,如果不使用New那么在初始化所有字段之前,字段将保持为未赋值状态,且对象不可用。 2、继承性结构:不能从另外一个结构或者类继承,本身也不能被继承,虽然结构没有明确的Sealed申明,可是结构是隐式的Sealded;类:完全可扩展,除非显示的申明Sealed,否则类可以继承其他类和接口,自身也可以被继承;注:虽然结构不能被继承,可是结构能够继承接口,方式和类继承接口一样。 3、内部构造结构:没有默认的构造函数,但是可以添加带参数(结构不能添加不带任何参数的构造函数)的构造函数;没有析构函数;没有abstract和sealed(因为不能继承);没有portected修饰符,因为结构不能被继承;可以不使用new 初始化;(例如:Struct A; A.Property = tempA;)在结构中初始化实例字段是错误的;(例如:Struct B{public P1=1; //Error,Initial Values not Allowed.public p2;}) 类:有默认的构造函数;有析构函数;可以使用abstract和sealed;有protected修饰符;必须使用new关键字初始化(静态类除外) 总结:如何选择结构还是类
  讨论了结构与类的相同之处和差别之后,下面讨论如何选择使用结构还是类:
  1.堆栈的空间有限,对于大量的逻辑的对象,创建类要比创建结构好一些
  2.结构表示如点、矩形和颜色这样的轻量对象,例如,如果声明一个含有 1000 个点对象的数组,则将为引用每个对象分配附加的内存。在此情况下,结构的成本较低。
  3.在表现抽象和多级别的对象层次时,类是最好的选择
  4.大多数情况下该类型只是一些数据时,结构时最佳的选择 参考:1、http://www.chinaitpower.com/A/2004-10-20/136449.html          2、《C#高级编程(第4)》

时间: 2024-09-13 03:41:46

C#学习之结构与类的区别的相关文章

c#中结构与类的区别

区别 目录  类与结构的实例比较    类与结构的差别    如何选择结构还是类  一.类与结构的示例比较: 结构示例: public struct Person {    string Name;    int  height;    int  weight public bool overWeight() {     //implement something } }   类示例:    public class TestTime    {  int hours;  int minutes;

结构和类的区别

问题描述 结构是值类型,类是引用类型结构不能从另外一个结构或者类继承,本身也不能被继承,类完全可扩展的,除非显示的声明sealed否则类可以继承其他类和接口,自身也能被继承.结构里没有方法,只有属性成员,二者均可实现接口 解决方案 解决方案二:结构没有默认的构造函数,但是可以添加构造函数没有析构函数没有abstract和sealed(因为不能继承)不能有protected修饰符可以不使用new初始化在结构中初始化实例字段是错误的类有默认的构造函数有析构函数可以使用abstract和sealed有

C#.NET中关于结构与类之间的区别

目录  类与结构的实例比较 类与结构的差别 如何选择结构还是类 一.类与结构的示例比较: 结构示例: publicstructPerson {  stringName;  intheight;  intweight;  publicbooloverWeight()  {   //implementsomething  } } 类示例: publicclassTestTime {  inthours;  intminutes;  intseconds;  publicvoidpasstime()

C++语言学习之从结构到类

编程之前,有必要复习一下C++中面向对象的一些基本概念.我们知道,C++与C相比有许多优点,主要体现在封装性(Encapsulation).继承性(Inheritance)和多态性(Polymorphism).封装性把数据与操作数据的函数组织在一起,不仅使程序结构更加紧凑,并且提高了类内部数据的安全性;继承性增加了软件的可扩充性及代码重用性;多态性使设计人员在设计程序时可以对问题进行更好的抽象,有利于代码的维护和可重用.Visual C++不仅仅是一个编译器,更是一个全面的应用程序开发环境,读者

[C#]图说结构体和类的区别

你真的能准确说出结构体和类的区别嘛,不妨先试试下面几道题,看你答案是否准确: 1. 2. 3. 4. 不看答案之前,自己先说一下答案,然后下面再公布答案,如果你能准确说出正确答案,那么说明你对结构体和类就很了解: 先看看stackoverflow是怎么解释结构体和类是怎么选择的: 下面公布以上题目答案,你猜对了吗? 1. 2. 3. 4.

图解css3:核心技术与案例实战. 2.8 结构伪类选择器

2.8 结构伪类选择器 伪类可以将一段并不存在的HTML当作独立元素来定位,或是找到无法使用其他简单选择器就能定位到的切实存在的元素.因此CSS3给伪类选择器引入一种"结构伪类选择器".这种选择器可以根据元素在文档树中的某些特性(如相对位置)定位到它们.也就是说,通过文档树结构的相互关系来匹配特定的元素,从而减少HTML文档对ID或类名的定义,帮助你保持代码干净和整洁. 2.8.1 重温HTML的DOM树 所有的结构伪类都是基于HTML文档树的,也称做文档对象模型(DOM),下面简单回

C#学习系列-String与string的区别

原文:C#学习系列-String与string的区别 参考:http://www.microsoftvirtualacademy.com/Content/ViewContent.aspx?et=9851&m=9832&ct=31042 如有错误,欢迎指正 String:类,System.String string:类型,变量 两者本质上没有任何区别,都是System.String,string只是System.String的别名而已 唯一的区别在于如何按照代码约定的来写,如声明变量时使用小

结构和类

在C++中,结构和类很相似,结构的成员默认为公共类型,而类的成员默认为私有类型.而在C#中,它们是完全不同的类型: 1:类型: 结构是值类型,在堆栈上分配地址,所以结构之间的赋值可以创建新的结构:而类是引用类型,在堆上分配地址,所以类之间的赋值只是复制引用.堆栈的执行效率要比堆的执行效率高,可是堆栈的资源有限,不适合处理大的逻辑复杂的对象,所以结构处理作为基类型对待的小对象,而类处理某个商业逻辑. 2:继承性: 结构不能被继承,除了它们都是由System.Valuetype派生而来.可是结构能够

[leveldb] 学习leveldb第一个类Status

[TOC] 回顾上一篇文章<[leveldb] 初步探索 leveldb>的样例代码,是不是发现有个类比例简单:leveldb::Status,你发现它有status.ok()和status.ToString()方法.那怎么找到Status类的定义和成员方法的实现呢? 1. 第一步:把相关代码找出来 1-1 用grep 大法过滤内容 我们知道C++的类一般是这样定义的:class Status {...},我们grep在当前目前递归-r .全词匹配-w和半词匹配都搜不到,最后grep &quo