再大的东西不去找,也就没了,再小的知识不去记,也就忘了。今天来写一写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成员

  请斧正。

  

最新文章

  1. Linux(二)__文件目录、常用命令
  2. 使用Maven自动部署Java Web应用到Tomcat服务器
  3. Hibernate 检索策略
  4. js(function(){alert(‘’‘)})
  5. IOS开发--常用的基本GDB命令
  6. VC调用系统的调色板
  7. xmlWriter 以UTF-8格式写xml问题
  8. NSDate和NSString
  9. linq小知识总结
  10. cell函数总结
  11. C#实例:5个.net经典例子(窗体与界面设计)
  12. docker工作流程
  13. 谱聚类(Spectral clustering)分析(1)
  14. 64位Win10系统安装Mysql5.7.11
  15. 在IDEA中设置命令行参数
  16. 两个UITableView的级联菜单
  17. Activiti reassign task to another user
  18. 【C++】拷贝构造函数(深拷贝,浅拷贝)详解
  19. java编程IO简单回顾和学习
  20. 面板支持单个,多个元素的jQuery图片轮播插件

热门文章

  1. Linux登录出现modle is unknow
  2. [转]JQuery Ajax 在asp.net中使用总结
  3. 译:Google的大规模集群管理工具Borg(二)------ Borg架构
  4. 【C#】3.算法温故而知新 - 快速排序
  5. 【转载】jQuery Validate验证框架 + CKEditor 无法验证问题的解决方法
  6. [ZZ]Sign Up for the First-Ever Appium Roadshow on August 20th in New York City
  7. SpringMVC 通过post接收form参数或者json参数
  8. MySQL的重装问题解决方法
  9. Android应用程序签名详解 简介
  10. Android 中JNI创建实例