当前位置:  编程技术>.net/c#/asp.net

c#结构和类的相关介绍

    来源: 互联网  发布时间:2014-10-16

    本文导语:  我们不关心对象内部是怎么实现的,我们关心的是他提供给我什么接口,有什么操作。从技术上来说,结构属于值类型,而类属于引用类型。结构不能指定继承基类类型,类可以。不过结构和类都能实现接口。 一、应用场合结...

我们不关心对象内部是怎么实现的,我们关心的是他提供给我什么接口,有什么操作。从技术上来说,结构属于值类型,而类属于引用类型。结构不能指定继承基类类型,类可以。不过结构和类都能实现接口。
一、应用场合
结构的应用场合:

一、自定义数据类型,数据成员是公开的,提供工具函数。

二、抽象的数据类型,数据成员是密封的,提供相关的数据操作函数。

总之,都是围绕数据作文章。

类的应用场合:

一、提供一组类,形成一个有机整体,形成一个系统,类数据成员是密封的,只提供相互通信的函数接口。

类主要通过不同的类组成一个类间通信的系统。而类自身是整个系统的一部分。

二、成员和可访问性
作为抽象数据类型的工具,类和结构提供了丰富的封装功能。

1.字段定义数据成员,无封装

2.属性封装字段的访问方式

3.函数提供可用操作

4.事件提供了处理消息的模型

5.索引器封装了数据集合

另外

构造函数、析构函数负责初始化和清理垃圾(在c#中需要使用IDispose模式)

对于成员,可以有三大类,1、类成员,所有实例共享;(static 修饰)2、对象公开成员;(public 修饰)3、对象私有成员。其中公开成员是最重要的,私有成员属于内部实现细节。

公开成员是对象的特征,因为对于使用者来说,只能通过公开成员和对象进行互动。可以通过提取公开成员,形成一个独立接口,用来隔离具体的实现。这样,设计者便可以提供不同的类实现给客户。

三、泛型和接口
类和结构的共同点都是属于实现,而接口属于规范,客户端应该避免直接接触具体的实现,否则客户端就需要根据实现的变化而变化,这明显是不经济的。但是类和结构又有差别,类侧重行为,因此和接口更加搭配;而结构侧重数据,而接口是没有数据的,并且接口属于引用类型,当结构作为值类型转化成接口,就会产生装箱,会有性能问题。因此,接口一般不会配合结构来使用,而结构应该作为更加单纯的数据单元,不应该添加太多功能性。如果需要设计功能丰富的组件,最好是基于类来实作。当结构作为数据单元,它要修改设计的余地很少,因为数据单元的应用场合更多是被其他人修改,不具太多自主性。结论是结构自身便可以作为规范。

泛型是未完成的类型,因此提供了客户端自定义类型的机会。泛型的每一个实例,都共享相同或者类似的代码,那么客户端需要泛型的理由是什么?

c#是强类型的系统,就算逻辑上一样,因为类型不同,在编译器看来都是完全不同的代码。当客户端需要为不同类型采取相同的逻辑的时候,泛型就提供了一个快捷的,越过强类型限制的渠道。比如有个int + int 和 float + float在我们人类看来几乎是一摸一样,但是强类型的编译器要求你重复书写代码,泛型能做到T + T,然后让客户端用可支持+操作的参数生成任何类型。

从客户端的角度,它不在乎实现是怎样的,它在乎的是接口是怎样的。泛型对客户端的意义在于强化了接口,从提供特定类型的接口到提供满足特定条件的一定范围内的类型的新型接口。这就让可用性大大增强。(按照实际应用情况,我们应该将泛型视为常态,单一类型的接口才是特殊态)。


    
 
 

您可能感兴趣的文章:

  • C#学习笔记之C#结构
  • C#枚举类型与结构类型实例解析
  • 如何实现C#自定义结构的强制转换
  • C#中使用反射获取结构体实例及思路
  • C#中结构(struct)的部分初始化和完全初始化实例分析
  • 深入c# 类和结构的区别总结详解
  • C++联合体转换成C#结构的实现方法
  • 深入探讨C#中的结构struct
  • C#中类与结构的区别实例分析
  • C#学习笔记之用户定义类(或结构)的类型转换
  • c#分支与循环结构的实例解析
  • C#数据结构之循环链表的实例代码
  • 基于c# 类、接口、结构的联系与区别详解
  • c# DataTable与不同结构实体类转换的方法实例
  • C#数据结构揭秘一
  • C#数据结构与算法揭秘一
  • c#入门之枚举和结构体使用详解(控制台接收字符串以相反的方向输出)
  • C#数据结构与算法揭秘二 线性结构
  • C#数据结构与算法揭秘三 链表
  • C#数据结构与算法揭秘四 双向链表
  • 基于Key-Value的NOSQL数据库Redis的数据结构及常用相关命令介绍
  • 强人,linux下驱动相关数据结构和usb设备数据结构之间的功能分析
  • 请问有关linux底层网络数据结构sk_buff相关知识
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • <<大话数据结构>>中冒泡排序算法改进
  • 请问:在用proc方式往数据库插入数据时,我能不能定义一个结构体,它与表的每一项对应,将结构体赋好值后,再只将这个结构体插入表中,这行不行啊?
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • jquery iis7站长之家
  • 数据结构:图(有向图,无向图),在Python中的表示和实现代码示例
  • 《arm体系结构结构与编程》书如何
  • mysql 命令大全及导入导出表结构或数据
  • file结构和inode结构
  • 《莱昂氏UNIX源代码分析》中有一种结构体声明没有结构体名
  • 关于学籍管理系统B/S结构实现的结构问题
  • GCC 编译问题: 结构A中有个成员结构B??
  • 谁能告诉我EJB的体系结构有哪些,这些体系结构的优缺点如何,万分感谢!
  • 协议的设计一般采用结构体进行数据打包,在协议设计的结构体中能不能使用指针 ?
  • struct __una_u16结构是什么结构.
  • GNU汇编fill填充一个数据结构使得另一个数据结构全部清零
  • 高手帮帮忙!vi中如何实现跳转到任意结构体或函数的声明处,包括系统库中声明的函数和数据结构?
  • jbuilder7里如何在project pane里显示出某个project的所有的类的结构图,就如显示source java files的结构图一样
  • 关于客户服务器结构与浏览器服务器结构编程的比较
  • 有一个win32的结构体,大伙看看能否转换成linux下的基本等价的结构体?
  • 结构的用法?
  • 我的关于BS结构的疑惑


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3