C#学习笔记-基础知识篇(不定期更新)
1.父类必须包含构造函数么?
父类必须要有一个构造函数,有参无参都可以。
构造函数是对象的基本,没有构造函数就没有对象,若父类中显示的有参数的构造函数,在子类继承就必须写一个构造函数来调用父类的构造函数。
如果父类中有没有参数的构造函数,在子类中可以不显示的写父类的构造函数,系统会自动调用没有参数的构造函数。
2.Assembly.CreateInstance方法
using System.Reflection; namespace AssemblyTest
{
class Program
{
static void Main(string[] args)
{
Test t;
Test e;
Test s;
string assembleName = "AssemblyTest"; //Assembly.CreateInstance 方法 (String typeName)
t = (Test)Assembly.Load(assembleName).CreateInstance(assembleName + ".TestOne");
t.LittleTest(); //Assembly.CreateInstance 方法 (String, Boolean)
//使用可选的区分大小写搜索,从此程序集中查找指定的类型,然后使用系统激活器创建它的实例。
e = (Test)Assembly.Load(assembleName).CreateInstance(assembleName + ".TestTwo",false);
e.LittleTest(); //Assembly.CreateInstance 方法 (String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[])
//使用可选的区分大小写搜索并具有指定的区域性、参数和绑定及激活特性,从此程序集中查找指定的类型,并使用系统激活器创建它的实例。
s = (Test)Assembly.Load(assembleName).CreateInstance(assembleName + ".TestThree", false, BindingFlags.Default, null, null, null, null);
s.LittleTest(); Console.Read();
}
}
abstract class Test
{
public abstract void LittleTest();
} class TestOne : Test
{
public override void LittleTest()
{
Console.WriteLine("我是测试1");
}
} class TestTwo : Test
{
public override void LittleTest()
{
Console.WriteLine("我是测试2");
}
} class TestThree : Test
{
public override void LittleTest()
{
Console.WriteLine("我是测试3");
}
} }
适用:在程序集中查找指定的类型,并使用系统激活器创建它的实例。
需要using System.Reflection;
(备注:来源于建造者模式的附: http://www.cnblogs.com/Aries-rong/p/7647666.html/ )
3.ushort[]与byte[]相互转换

4.字节、位、比特概念梳理
位(bit):
表示二进制位。位是计算机内部数据存储的最小单位,11010100是一个8位二进制数。一个二进制位只可以表示0和1两种状态。
字节(byte):
字节是计算机中数据处理的基本单位。计算机中以字节为单位存储和解释信息,规定一个字节由八个二进制位构成,即1个字节等于8个比特(1byte=8bit)。通常1个字节可以存入一个ASCII码,2个字节可以存放一个汉字国标码。
字长:
计算机的每个字所包含的位数称为字长。计算机的字长是指它一次可处理的二进制数字的数目。计算机处理数据的速率,自然和它一次能加工的位数以及进行运算的快慢有关。
字长是衡量计算机性能的一个重要因素。
5.正则表达式
正则表达式语言由两种基本字符类型组成:原义(正常)文本字符和元字符。元字符使正则表达式具有处理 能力。元字符既可以是放在 [] 中的任意单个字符(如 [a] 表示匹配单个小写字符 a ),也可以是字符序列(如 [a-d] 表示匹配 a 、 b 、 c 、 d 之间的任意一个字符,而 \w 表示任意英文字母和数字及下划线),下面是一些常见的元字符:
| 元字符 | 说明 |
| . | 匹配除 \n 以外的任何字符(注意元字符是小数点)。 |
| [abcde] | 匹配 abcde 之中的任意一个字符 |
| [a-h] | 匹配 a 到 h 之间的任意一个字符 |
| [^fgh] | 不与 fgh 之中的任意一个字符匹配 |
| \w | 匹配大小写英文字符及数字 0 到 9 之间的任意一个及下划线,相当于 [a-zA-Z0-9_] |
| \W | 不匹配大小写英文字符及数字 0 到 9 之间的任意一个,相当于 [^a-zA-Z0-9_] |
| \s | 匹配任何空白字符,相当于 [ \f\n\r\t\v] |
| \S | 匹配任何非空白字符,相当于 [^\s] |
| \d | 匹配任何 0 到 9 之间的单个数字,相当于 [0-9] |
| \D | 不匹配任何 0 到 9 之间的单个数字,相当于 [^0-9] |
| [\u4e00-\u9fa5] | 匹配任意单个汉字(这里用的是 Unicode 编码表示汉字的 ) |
上面的元字符都是针对单个字符匹配的,要想同时匹配多个字符的话,还需要借助限定符。下面是一些常见 的限定符 ( 下表中 n 和 m 都是表示整数,并且 0<n<m) :
| 限定浮 | 说明 |
| * | 匹配 0 到多个元字符,相当于 {0,} |
| ? | 匹配 0 到 1 个元字符,相当于 {0,1} |
| {n} | 匹配 n 个元字符 |
| {n,} | 匹配至少 n 个元字符 |
| {n,m} | 匹配 n 到 m 个元字符 |
| + | 匹配至少 1 个元字符,相当于 {1,} |
| \b | 匹配单词边界 |
| ^ | 字符串必须以指定的字符开始 |
| $ | 字符串必须以指定的字符结束 |
说明:
- 由于在正则表达式中“ \ ”、“ ? ”、“ * ”、“ ^ ”、“ $ ”、“ + ”、“(”、“)”、“ | ”、“ { ”、“ [ ”等字符已经具有一定特殊意义,如果需要用它们的原始意义,则应该对它进行转义,例如希 望在字符串中至少有一个“ \ ”,那么正则表达式应该这么写: \\+ 。
- 可以将多个元字符或者原义文本字符用括号括起来形成一个分组,比如 ^(13)[4-9]\d{8}$ 表示任意以 13开头的移动手机号码。
- 另外对于中文字符的匹配是采用其对应的 Unicode 编码来匹配的,对于单个 Unicode 字符,如 \u4e00 表示汉字“一”, \u9fa5 表示汉字“龥”,在 Unicode 编码中这分别是所能表示的汉字的第一个和最后一个的 Unicode 编码,在 Unicode 编码中能表示 20901 个汉字。
- 关于 \b 的用法,它代表单词的开始或者结尾,以字符串“ 123a 345b 456 789d ”作为示例字符串,如果正则表达式是“ \b\d{3}\b ”,则仅能匹配 456 。
- 可以使用“ | ”来表示或的关系,例如 [z|j|q] 表示匹配 z 、 j 、 q 之中的任意一个字母。
6.接口(interface)与抽象类(abstract)
接口是对动作的抽象,抽象类是对根源的抽象。
抽象类表示的是,这个对象是什么;接口表示的是,这个对象能做什么。
异同:
- 抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。
- 抽象类要被子类继承,接口要被类实现。
- 接口只能做方法申明,抽象类可以做方法申明,也可以做方法实现。
- 接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。
- 抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个实现接口的时候,如果不能全部实现接口方法,那么该类也只能是抽象类。
- 抽象方法只能申明,不能实现,接口是设计的结果,抽象类是重构的结果。
- 抽象类中可以没有抽象方法
- 如果一个类中有抽象方法,那么这个类只能是抽象类。
- 抽象方法要被实现,所以不能是静态的,也不能使私有的。
- 接口可继承接口,并可多继承接口,但是类只能单根继承。
补充:virtual
- virtual修饰的方法必须有方法实现,哪怕是只有一对大括号;abstract修饰的方法不能有实现。
- virtual可以被子类重写;abstract必须被子类重写。
- 如果类中的某一个函数被abstract修饰,则类名必须用abstract修饰。
- abstract修饰的类不能被实例化。
7.B/S结构&C/S结构
B/S结构:Browser/Server=>浏览器/服务器;
C/S结构:Client/Server=>客户机/服务器:客户机需要安装专门的客户端软件。
8.C#扩展方法Extension Method
扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的。它们的第一个参数指定该方法作用于哪个类型,并且该类型以this修饰符为前缀。扩展方法当然不能破坏面向对象封装的概念,所以只能是访问所扩展类的public成员。
扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。扩展方法使一种特殊的静态方法,单可以像扩展类型上的实例方法一样进行调用。
C#扩展方法第一个参数指定该方法作用于哪个类型,并且该参数以this修饰符为前缀。
扩展方法的目的就是为一个现有类型添加一个方法,现有类型既可以是int,string等数据类型,也可以是自定义的数据类型。
C#3.0。
C#学习笔记-基础知识篇(不定期更新)的更多相关文章
- jQuery学习笔记 - 基础知识扫盲入门篇
jQuery学习笔记 - 基础知识扫盲入门篇 2013-06-16 18:42 by 全新时代, 11 阅读, 0 评论, 收藏, 编辑 1.为什么要使用jQuery? 提供了强大的功能函数解决浏览器 ...
- three.js学习笔记--基础知识
基础知识 从去年开始就在计划中的three.js终于开始了 历史介绍 (摘自ijunfan1994的转载,感谢作者) OpenGL大概许多人都有所耳闻,它是最常用的跨平台图形库. WebGL是基于Op ...
- SQLServer学习笔记<>.基础知识,一些基本命令,单表查询(null top用法,with ties附加属性,over开窗函数),排名函数
Sqlserver基础知识 (1)创建数据库 创建数据库有两种方式,手动创建和编写sql脚本创建,在这里我采用脚本的方式创建一个名称为TSQLFundamentals2008的数据库.脚本如下: ...
- Hadoop学习笔记—15.HBase框架学习(基础知识篇)
HBase是Apache Hadoop的数据库,能够对大型数据提供随机.实时的读写访问.HBase的目标是存储并处理大型的数据.HBase是一个开源的,分布式的,多版本的,面向列的存储模型,它存储的是 ...
- Java Script 学习笔记 -- 基础知识
Java script 概述 java Script 的简介 JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为 ...
- php学习笔记——基础知识(1)
1.PHP 脚本在服务器上执行,然后向浏览器发送回纯 HTML 结果. 2.基础 PHP 语法 1)PHP 脚本可放置于文档中的任何位置. 2)PHP 脚本以 <?php 开头,以 ?> ...
- Redux学习笔记-基础知识
Redux概述 是什么:Redux是管理状态的容器,提供可预测的状态管理. 怎么做:Redux主要是用来管理组件或者应用的状态,本质上跟一个事件处理器差不多.通过分发action触发reduce来 ...
- Validform 学习笔记---基础知识整理
面对表单的验证,自己写大量的js毕竟不是一个明智的做法.不仅仅是代码很长而且不便于梳理.Validform就是一款开源的第三方验证js的控件,通过添加相应的js以及css能够有效的验证表单,维护起来也 ...
- java虚拟机JVM学习笔记-基础知识
最近使用开发的过程中出现了一个小问题,顺便记录一下原因和方法--java虚拟机 媒介:JVM是每一位从事Java开发工程师必须翻越的一座大山! JVM(Java Virtual Machine)JRE ...
随机推荐
- jersey实现文件下载
好久没有更新博客了,今天来再次总结一下,之前有整理过关于jersey实现文件上传功能的相关知识,但是前一阵子在实习过程中写接口又要实现文件下载的功能,由于这些东西基本都是使用jersey提供的注解和接 ...
- 五.RabbitMQ之路由(Routing)和主题(topics)
翻译官网的文章已经翻译了几天了,这份官方文档写的总体算是很简洁易懂.它让我们很快的入门并了解了RabbitMQ的运作原理和使用方式.本篇最后介绍一下Exchange的另外两种类别,即direct和to ...
- Elasticsearch聚合——aggregation
聚合提供了分组并统计数据的能力.理解聚合的最简单的方式是将其粗略地等同为SQL的GROUP BY和SQL聚合函数.在Elasticsearch中,你可以在一个响应中同时返回命中的数据和聚合结果.你可以 ...
- LBSN中的用户行为模式分析
LBSN中的用户行为模式分析 zoerywzhou@gmail.com http://www.cnblogs.com/swje/ 作者:Zhouw 2015-12-23 声明: 1)该LBSN的 ...
- iOS白名单设置
在做分享.支付的时候需要跳转到对应的app,这里有需要设置的白名单列表<key>LSApplicationQueriesSchemes</key> <array> ...
- 【bird-front】前端框架介绍
bird前端项目,基于react.antd.antd-admin,封装常用数据组件,细粒度权限解决方案. bird-front是基于react的后台管理系统前端项目,框架构建部分严重借鉴于antd管理 ...
- APP之构架自己的webapi框架
当我们学习到一定程度的时候,我们会想要去深入了解代码底层的东西,也更想拥有一个属于自己的框架.本文可能成为编写一个webapi框架的开端.有研究MVC框架的朋友会发现,mvc框架的路由MvcRoute ...
- iOS 如何优化 App 的启动时间
App 运行理论 main() 执行前发生的事 Mach-O 格式 虚拟内存基础 Mach-O 二进制的加载 理论速成 Mach-O 术语 Mach-O 是针对不同运行时可执行文件的文件类型. 文件类 ...
- Python学习日记:day7-----集合
1.基础数据类型汇总补充 1,list: 在循环一个列表是,最好不能删除列表中的元素. 2,bool 空列表.int:0.空str.空dict.空set--->bool:false 其余为tru ...
- Servlet小总结
Servlet Servlet(服务器端小程序)是使用Java语言编写的服务器端程序,像JSP一样,生成动态的Web页.Servlet主要运行在服务器端,并由服务器调用执行. Servlet处理的基本 ...