说好的java只能先坑了,毕竟计划赶不上变化,以下是 c# 基础部分。
1:变量,方法的命名方式
目的就是一眼看到实例名 方法名 就知道该变量是做什么的。
主流的命名方式有驼峰命名规则,pascal命名规则,以及匈牙利命名规则。
先看案例 :
var NewCamel = new Camel(); //pascal命名规则
var newCamel = new Camel();//驼峰命名规则
var CnewCamel = new Camel();//匈牙利命名规则
其中区别就是 pascal 命名需要每个单词首字母大写,而驼峰命名则是 第一个单词首字母小写,之后的单词首字母大写。
匈牙利命名规则比较特殊,首字母表示了实例的类型。
通常c#的命名规则使用 驼峰命名规则,但是接口则使用了匈牙利命名规则(接口的命名通常以 I 作为开头)。
字段 则开头使用下划线 。
2:进程
一个应用程序 拥有一个进程,一个进程是由多个线程组成的,进程在内存中分配程序执行所需要的空间,可以操作进程来操作应用程序。
3:面向对象
面向对象主要的优势:封装,继承,多态。
封装:封装复杂性,一段代码到处复制是肯定不可以的,工具等方法 一般都是封装成 静态类,会操作共有资源的需要加锁。
继承:一个功能可能有许多实现方式,比如从本地硬盘读取一首歌,从网络读取一首歌等,这样就可以创建一个接口,这个接口有一个Read(); 方法,读取本地硬盘的方法实现这个接口,读取网络的方法也实现这个接口,这样就能在需要的时候根据不同的方法来调用这个接口,创建实例,同时AOP 能让这项优势扩大(动态代理,持久化实例等)。
特性:
单根性:只能继承一个类。
传递性:父类也可以继承其他类。
里氏转换:子类赋值给父类,(协变和逆变)如果父类引用的是子类对象,则可以将这个父类转换成对应的子类。
is 和 as 关键字:
is 的用法:
var int32 = new Int32(100); if(int32 is Int32){ //do something }else{ //do else something }
as 的用法:
var asResult = int32 as Int32; if(asResult!=null){ //do something }else{ //do else something }
多态:
虚方法:用 关键字 virtual 装饰方法名,表示可以重写,子类中 使用override 重写标记了 virtual 的方法。
抽象类:abstract 类 中可以包含非抽象的方法,但非抽象类不能包含抽象方法。
4:new this base:
new 创建对象:
在堆中开辟空间。
在开辟的空间中创建对象。
调用对象的构造函数。
this :
代表当前对象(构造函数)。
base :代表父类对象(构造函数)。
5:访问修饰符:
public :任何地方都能访问。
private:只能在当前类的内部访问。
internal :只能在当前程序集中访问。
protected:只能在当前类和该类的子类中访问。
其中public internal 可以修饰类,其他只能修饰变量。
类的默认修饰符是 internal。
子类的访问权限不能高于父类(只能相等或小于)。