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 参数初始化 神经网络的参数学习是一个非凸优化问题.当使用梯度下降法来进行优化网络参数时,参数初 ...
随机推荐
- 利用API方式进行数据库的增删改查
/* 将数据库的增删改查单独放进一个包 */ package com.itheima28.sqlitedemo.dao; import java.util.ArrayList; import java ...
- nyoj 38 布线问题
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=38 最小生成树水题~ 代码: #include "stdio.h" / ...
- Linux 下子线程 exit code 在主线程中的使用
Linux线程函数原型是这样的: void* thread_fun(void* arg) 它的返回值是 空类型指针,入口参数也是 空类型指针.那么线程的 exit code 也应该是 void * 类 ...
- [嵌入式学习资料]ARM开发学习详解iTOP-4412开发板使用手册
拿到的最新4412开发板学习使用手册,完全免费,分享一下 下载地址:http://pan.baidu.com/s/1ntrJA8h
- Hadoop 2.0 中的资源管理框架 - YARN(Yet Another Resource Negotiator)
1. Hadoop 2.0 中的资源管理 http://dongxicheng.org/mapreduce-nextgen/hadoop-1-and-2-resource-manage/ Hadoop ...
- css3中box-flex的使用
语法: box-flex:<number> 其中number取值:使用浮点数指定对象所分配其父元素剩余空间的比例.设置或检索伸缩盒对象的子元素如何分配其剩余空间. html代码: < ...
- QTP 10 安装及破解
QTP(QuickTest Professional),是一款比较优秀的商业自动化测试工具,主要用于web项目和C/S结构程序的测试. QTP具有的一大特性:关键字驱动测试(keyword-drive ...
- WIN7系统自带截图工具SnippingTool
在无网络的情况下,无QQ情况下,如何截图?以及如何设置快捷键? 方法 首先,我们在“开始”菜单最上面找到它,如图: 找不到也没关系 C:\Windows\system32\SnippingTool.e ...
- java 21 - 8 复制文本文件的5种方式
需求:复制文本文件 分析: 由于文本文件我们用记事本打开后可以读懂,所以使用字符流. 而字符流有5种复制的方式: 首先写main方法 public static void main(String[] ...
- 通过TTL值判断系统
我们做网络的渗透测试,开始的时候会ping一下网站判断一下网站使用的系统,默认情况下, UNIX 255 LINUX 64WIN2K/NT 128WINDOWS 32 但是 每经过一个路由器就会减1这 ...