c#结构和类的相关介绍

所属分类: 软件编程 / C#教程 阅读数: 66
收藏 0 赞 0 分享

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

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

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

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

类的应用场合:

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

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

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

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

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

3.函数提供可用操作

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

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

另外

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

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

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

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

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

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

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

更多精彩内容其他人还在看

WPF仿三星手机充电界面实现代码

这篇文章主要为大家详细介绍了WPF仿三星手机充电界面实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

浅谈C#各种数组直接的数据复制/转换

下面小编就为大家带来一篇浅谈C#各种数组直接的数据复制/转换。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

C#访问SQLServer增删改查代码实例

这篇文章主要为大家详细介绍了C#访问SQLServer增删改查代码实例,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

C#根据身份证号码判断出生日期和性别

这篇文章主要为大家详细介绍了C#根据身份证号码判断出生日期和性别的方法,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

C# 向Word中设置/更改文本方向的方法(两种)

在一般情况下word中输入的文字都是横向的,今天小编给大家带来两种方法来设置更改文本方向的方法,非常不错,对c# word 更改文本方向的知识感兴趣的朋友一起看看吧
收藏 0 赞 0 分享

让C# Excel导入导出 支持不同版本Office

让C# Excel导入导出,支持不同版本的Office,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

C#设置自定义文件图标实现双击启动(修改注册表)

这篇文章介绍的是利用C#设置自定义文件图标,然后实现双击启动的功能,文章给出了示例代码,介绍的很详细,有需要的可以参考借鉴。
收藏 0 赞 0 分享

C#两个相同属性的类赋值方法

这篇文章主要介绍了C#两个相同属性的类赋值方法的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

C#中ListView控件实现窗体代码

这篇文章主要介绍了C#中ListView控件实现窗体的核心代码,非常不错,具有参考借鉴价值,对c#listview相关知识感兴趣的朋友一起学习吧
收藏 0 赞 0 分享

浅谈C# 序列化与反序列化几种格式的转换

下面小编就为大家带来一篇浅谈C# 序列化与反序列化几种格式的转换。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享
查看更多