13.C#分部类型和静态类(七章7.1-7.2)
再大的东西不去找,也就没了,再小的知识不去记,也就忘了。今天来写一写C#中的分部类型和静态工具类,这些两个概念可能在我们的日常使用过程中都使用过,可能大家对这些内容觉得这些不是应该有的东西嘛,那就来复习一下吧。
分部类型,个人理解是对同一事物在两个不同空间的描述,编译器将组织我们编写的在不同文件中代码,组合成一个完整的描述。我们不能在一个文件中编写成员的一半代码,而把另外一半代码放到另外一个文件中,每个独立的成员必须完整地位于所处的文件中。如有一个Map类,成员属性放在Map0.cs中,而成员方法放在Map1.cs中,注意使用partial关键字。
//Map0.cs
public partial class Map
{
public long Width { get; set; }
public long Height { get; set; }
}
//Map1.cs
public partial class Map
{
public long GetSize()
{
return Width * Height;
}
}
还有一种常见的用法是当一个类要实现某一个接口同时继承某一个类时,分别在不同文件编写各自的实现。现有一个新类Canvas,代码如下
//Canvas0.cs
public partial class Canvas : IComparable
{
public int CompareTo(object obj)
{
return this.Price.CompareTo(((Canvas)obj).Price);
}
}
//Canvas1.cs
public partial class Canvas : Map
{
public double Price { get; set; }
}
由上可以看到在Canvas0.cs中是对IComparable接口的实现,而在Canvas1.cs中是对Map类的继承,不同文件分清了不同的功能。但我们在日常使用中,真心不用说要使用分部类型而去使用分部类型,不然文件多了,自己也搞不明白了,应该是不要刻意吧。分部类型的作用往往在于我们在编写自己的类时,后台帮我们生成一个使用partial的类,分清了代码文件的归属。
------------------------------------------------------------------------------------------------------
对于静态工具类,所有程序都会有自己编写的或者网上现有的工具类,常用如字符串操作类,数据库操作类等等。说下工具类的一些特点:
- 所有成员都是静态的(除了私有构造函数)
- 类直接从object中派生
- 不应该有状态,除非涉及高速缓存或单例
- 不能存在任何可见的构造函数
- 类是密封的
防止类派生,使用sealed关键字,添加一个私有构造函数防止创建实例,静态方法使用static关键字,这是C#1中创建工具类的方法,下面看代码,在C#后续版本中如何实现。
public static class StringHelper
{
public static int GetLen(string str)
{
return str.Length;
}
}
C#编译器知道类是一个静态类,所以不用生成一个默认构造函数。下面来抄下课本,罗列下编译器在类定义上执行的大量约束:
- 类不能声明为abstract或sealed
- 类不能设定要实现的接口
- 类不能设定要继承的基类
- 类不能包含任何非静态成员,包括构造函数
- 类不能包含任何操作符
- 类不能包含任何protected或protected internal成员
请斧正。
13.C#分部类型和静态类(七章7.1-7.2)的更多相关文章
- apue第七章学习总结
apue第七章学习总结 1.main函数 程序是如何执行有关的c程序的? C程序总是从main函数开始执行.main函数的原型是 int main(int argc,char *argv[]); 其中 ...
- [Effective Java]第七章 方法
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- Linux Shell 示例精解(第七章 gawk编程)转载
第七章 gawk功能:gawk编程 7.1.1 数字和字符串常量 初始化和类型强制 在awk中,变量不需要定义就可以直接使用,使用一个变量就是对变量的定义.变量的类型可以试数字.字符串,或者 ...
- CSS3秘笈:第七章
第七章 margin.padding和border 1.盒模型:四个属性: (1)padding:内容与其边框线之间的空间. (2)border:盒子周围的直线 (3)background-colo ...
- Java基础知识二次学习--第七章 容器
第七章 容器 时间:2017年4月27日15:08:30 章节:07章01节~07章04节 视频长度:20:21 +12:38 +3:55 +2:57 内容:容器API 心得: Java API ...
- Linux内核分析 读书笔记 (第七章)
第七章 链接 1.链接是将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可被加载(或被拷贝)到存储器并执行. 2.链接可以执行于编译时,也就是在源代码被翻译成机器代码时:也可以执行于 ...
- 2017.2.28 activiti实战--第七章--Spring容器集成应用实例(五)普通表单
学习资料:<Activiti实战> 第七章 Spring容器集成应用实例(五)普通表单 第六章中介绍了动态表单.外置表单.这里讲解第三种表单:普通表单. 普通表单的特点: 把表单内容写在 ...
- Linux系统管理第五六七章 权限及归属管理 磁盘管理 文件系统与lvm
第五六七章 alias 查看系统别名 67 chmod 设置文件或目录的权限 -R表示以递归的方式设置目录及目录下的所有子目录及文件的权限 u:属主 g:属组 o:其他人 a:所有人 +:添加 ...
- 第七章:网络优化与正则化(Part2)
文章相关 1 第七章:网络优化与正则化(Part1) 2 第七章:网络优化与正则化(Part2) 7.3 参数初始化 神经网络的参数学习是一个非凸优化问题.当使用梯度下降法来进行优化网络参数时,参数初 ...
随机推荐
- redis 优化
系统优化echo "vm.overcommit_memory=1" > /etc/sysctl.conf 0, 表示内核将检查是否有足够的可用内存供应用进程使用:如果有足够的 ...
- 计算几何 平面最近点对 nlogn分治算法 求平面中距离最近的两点
平面最近点对,即平面中距离最近的两点 分治算法: int SOLVE(int left,int right)//求解点集中区间[left,right]中的最近点对 { double ans; //an ...
- 【读书笔记《Android游戏编程之从零开始》】9.游戏开发基础(如何快速的进入 Android 游戏开发)
1.不可盲目看API文档很多人在接触学习一门新的平台语言时,总喜欢先去探究一番API文档.先不说成效如何,至少编者认为这种方式不适合大部分人来效仿,主要原因在于 API 领域广泛,牵涉到的知识点太多, ...
- hdu 5861 Road 两棵线段树
传送门:hdu 5861 Road 题意: 水平线上n个村子间有 n-1 条路. 每条路开放一天的价格为 Wi 有 m 天的操作,每天需要用到村子 Ai~Bi 间的道路 每条路只能开放或关闭一次. ( ...
- 边工作边刷题:70天一遍leetcode: day 85-4
Walls and Gates 要点: 同样是bfs,这题可以用渲染的方法(即全部gate进初始q),注意区别Shortest Distance from All Buildings.那道题要找到某个 ...
- java9-2形式参数
1.形式参数: 基本类型(太简单) 引用类型 类名:(匿名对象的时候其实我们已经讲过了)需要的是该类的对象 抽象类:需要的是该抽象的类子类对象 接口:需要的是该接口的实现类对象 A. 类名:(匿名对象 ...
- js原生选项卡(包含移动端无缝选项卡)三
今天分享下移动端原生js的无缝轮播图: 移动端尽量减少使用DOM操作来频繁的浪费移动端设备的性能,所以这个无缝轮播图更多的使用了transition和transform,无缝的思想和昨天分享的PC端的 ...
- ORACLE中创建和删除临时表
CREATE GLOBAL TEMPORARY TABLE TABLENAME ( COL1 VARCHAR2(10), COL2 NUMBER) ON COMMIT PRESERVE(D ...
- 如何用chrome插件使上网生活更美好-持续更新
所有插件都可以到Chrome Web Store搜索下载 1.Read Later Fast v-1.6.8 ***刷网页的时候,有很多值得我们阅览但当时木有时间看怎么办? --加可书签啊! ***可 ...
- StartUML 破解
各平台版本均适用,本文更改的为Mac版本. 1,打开对应 mac版本的安装包位置,在对应目录/Applications/StarUML.app/Contents/www/license/node/L ...