再大的东西不去找,也就没了,再小的知识不去记,也就忘了。今天来写一写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的类,分清了代码文件的归属。

------------------------------------------------------------------------------------------------------

  对于静态工具类,所有程序都会有自己编写的或者网上现有的工具类,常用如字符串操作类,数据库操作类等等。说下工具类的一些特点:

  1. 所有成员都是静态的(除了私有构造函数)
  2. 类直接从object中派生
  3. 不应该有状态,除非涉及高速缓存或单例
  4. 不能存在任何可见的构造函数
  5. 类是密封的

  防止类派生,使用sealed关键字,添加一个私有构造函数防止创建实例,静态方法使用static关键字,这是C#1中创建工具类的方法,下面看代码,在C#后续版本中如何实现。

 public static class StringHelper
{
public static int GetLen(string str)
{
return str.Length;
}
}

  C#编译器知道类是一个静态类,所以不用生成一个默认构造函数。下面来抄下课本,罗列下编译器在类定义上执行的大量约束:

  1. 类不能声明为abstract或sealed
  2. 类不能设定要实现的接口
  3. 类不能设定要继承的基类
  4. 类不能包含任何非静态成员,包括构造函数
  5. 类不能包含任何操作符
  6. 类不能包含任何protected或protected internal成员

  请斧正。

  

13.C#分部类型和静态类(七章7.1-7.2)的更多相关文章

  1. apue第七章学习总结

    apue第七章学习总结 1.main函数 程序是如何执行有关的c程序的? C程序总是从main函数开始执行.main函数的原型是 int main(int argc,char *argv[]); 其中 ...

  2. [Effective Java]第七章 方法

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  3. Linux Shell 示例精解(第七章 gawk编程)转载

    第七章 gawk功能:gawk编程 7.1.1 数字和字符串常量     初始化和类型强制  在awk中,变量不需要定义就可以直接使用,使用一个变量就是对变量的定义.变量的类型可以试数字.字符串,或者 ...

  4. CSS3秘笈:第七章

    第七章  margin.padding和border 1.盒模型:四个属性: (1)padding:内容与其边框线之间的空间. (2)border:盒子周围的直线 (3)background-colo ...

  5. Java基础知识二次学习--第七章 容器

    第七章 容器   时间:2017年4月27日15:08:30 章节:07章01节~07章04节 视频长度:20:21 +12:38 +3:55 +2:57 内容:容器API 心得: Java API ...

  6. Linux内核分析 读书笔记 (第七章)

    第七章 链接 1.链接是将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可被加载(或被拷贝)到存储器并执行. 2.链接可以执行于编译时,也就是在源代码被翻译成机器代码时:也可以执行于 ...

  7. 2017.2.28 activiti实战--第七章--Spring容器集成应用实例(五)普通表单

    学习资料:<Activiti实战> 第七章  Spring容器集成应用实例(五)普通表单 第六章中介绍了动态表单.外置表单.这里讲解第三种表单:普通表单. 普通表单的特点: 把表单内容写在 ...

  8. Linux系统管理第五六七章 权限及归属管理 磁盘管理 文件系统与lvm

    第五六七章   alias 查看系统别名   67 chmod 设置文件或目录的权限 -R表示以递归的方式设置目录及目录下的所有子目录及文件的权限 u:属主 g:属组 o:其他人 a:所有人 +:添加 ...

  9. 第七章:网络优化与正则化(Part2)

    文章相关 1 第七章:网络优化与正则化(Part1) 2 第七章:网络优化与正则化(Part2) 7.3 参数初始化 神经网络的参数学习是一个非凸优化问题.当使用梯度下降法来进行优化网络参数时,参数初 ...

随机推荐

  1. sudo简单命令语法及配置

    参考:http://yangrong.blog.51cto.com/6945369/1289452, https://wiki.archlinux.org/index.php/Sudo_(%E7%AE ...

  2. poj 3177 Redundant Paths

    题目链接:http://poj.org/problem?id=3177 边双连通问题,与点双连通还是有区别的!!! 题意是给你一个图(本来是连通的),问你需要加多少边,使任意两点间,都有两条边不重复的 ...

  3. 使用spring-test报异常org.springframework.asm.ClassReader.<init>(Unknown Source)

    spring3.x需要jdk1.7或以下版本 spring4.x与jdk1.8配合使用

  4. Ubuntu 14.04(32位)安装Oracle 11g(32位)全过程

    1.将系统更新到最新:sudo apt-get updatesudo apt-get dist-upgrade2.安装Oracle所需的依赖包:sudo apt-get install automak ...

  5. C++模板(一)

    1. 模板的概念. 我们已经学过重载(Overloading),对重载函数而言,C++的检查机制能通过函数参数的不同及所属类的不同.正确的调用重载函数.例如,为求两个数的最大值,我们定义MAX()函数 ...

  6. 二叉查找树的懒惰删除(lazy deletion)

    第四章习题:二叉查找树类实现懒惰删除,注意findMin()和findMax()(递归) 算是发布的第一篇学习笔记.也不敢保证写的代码一定正确,错了的地方请大家指正,谢谢. 直接开始吧.先谈谈数据结构 ...

  7. python 邮件发送 脚本

    import smtplib from email.header import Header from email.mime.text import MIMEText from_addr = 'XXX ...

  8. 【MVC 4】1.第一个 MVC 应用程序

    作者:[美]Adam Freeman      来源:<精通ASP.NET MVC 4> ASP.NET MVC 是微软的一个 Web开发框架,它整合了“模型—视图—控制器(MVC)”架构 ...

  9. lock与C#多线程

    lock与C#多线程 lock 关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁.简单讲就类似于 你去银行办理业务,一个柜台一次只能操作以为客户,而如果你要到这个柜台办理 ...

  10. Mango Weekly Training Round #6 解题报告

    比赛链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=41856#overview A.多种解法.可以dfs倒序染色,如mathlove ...