编程基础-msdn编程指南笔记
此博仅为笔记,摘自msdn编程指南文档,链接地址:http://msdn.microsoft.com/zh-cn/library/67ef8sbd.aspx
注释:// 单行注释 /* 多行注释*/
编码约定:命名约定:限定名称太长无法放入一行,可在点后截断;布局约定:每行仅编写一个语句,在方法定义和属性定义之间添加至少一个空白行;注释约定:将注释放在另一行,而不要放在代码行的末尾,在注释分隔符和注释文本之间插入一个空格;常用规范:处理大量文本使用 StringBuilder 对象,连接短字符串用+,
类型:c#是一种强类型语言.分为值类型,引用类型和指针类型三种,严格意义上有两种类型值类型和引用类型,它们从类型定义、实例创建、参数传递到内存分配都有所不同,其中,值类型的变量存储数据,主要包括三种:结构,枚举,自定义结构;引用类型的变量存储的实际数据的引用,包括数组、类、接口等,指针类型仅可用于unsafe模式;安全类型转换:is 和 as 运算符来测试强制转换是否会成功,而没有引发异常的风险。 通常,as 运算符更高效一些,因为如果可以成功进行强制转换,它会实际返回强制转换值。 而 is 运算符只返回一个布尔值。 因此,如果只想确定对象的类型,而无需对它进行实际强制转换,则可以使用 is 运算符。类型转换:隐式转换、显示转换、用户定义的转换、使用帮助程序类的转换。装箱:将值类型转换为Object或由此值类型实现的任一接口类型的过程。
//字符串转换为数字
string inputString = "abc";
int numValue;
bool parsed = Int32.TryParse(inputString, out numValue);
内存结构:栈:存放值类型和引用类型变量(就是引用对象在托管堆上的地址) 托管堆:存储对象,所有的引用类型都分配在托管堆上,由GC来管理和释放的;单独的值类型是存放在栈上的,类的值类型字段、属性是引用类型的一部分,随引用类型存储在托管堆上
形参:在默认情况下,CLR假设所有的方法参数都是按值传递的。当参数为引用类型的对象时,参数的传递是通过传递指向对象的引用来完成的(引用本身是按值传递的),另外可以用out和ref关键字来按引用的方式来传递参数,这两个关键字告诉C#编译器要产生额外的元数据来表示指定参数是按引用的方式来传递的:编译器将使用该信息来产生传递参数地址(而不是参数本身的值)的代码。其中ref要求参数在使用之前要显式初始化,out要在方法内部初始化;
数组:可以在一个数组数据结构中存储同一类型的多个变量。通过指定其元素的类型声明数组:type[] arrayName数组初始化时必须有数组大小或数组初始值设定项,在实例的生存期中维数和每个维度的长度是不能更改的;数组可以是一维,多维,交错数组(数组的数组);注意:要更改数组的长度只能通过重新更新引用来实现,当数组为null时,不可以访问Length属性或直接数组初始化;遍历数组可以使用for或foreach;Array是所有数组类型的抽象基类型,可以使用Array具有的属性及其他类成员,用于排序、搜索和复制数组,如:Length,Rank等。数组可作为实参传递给方法形参,由于数组是引用类型,因此方法可以更改元素的值。
//一维数组初始化
int[] array1 = new int[];
int[] array2 = new int[] { , , , , };
int[] array3 = { , , , , , };
//读取一维数组
int a1 = array1[];
//多维数组初始化
int[,] multiDimensionalArray1 = new int[, ];
int[,] multiDimensionalArray2 = { { , , }, { , , } };
//读取多维数组;维数array3D.Rank
int mul1 = multiDimensionalArray1[, ];
//交错数组
int[][] jaggedArray = new int[][];
jaggedArray[] = new int[] { , , , };
字符串:是 String 类型的对象,它的值是文本。除了在使用字符数组初始化字符串时以外,不要使用 new 运算符创建字符串对象。请在尝试访问字符串之前使用静态 IsNullOrEmpty(String) 方法验证字符串的值。常用方法:替换:.Replace("mountains", "peaks");定位:.IndexOf(temp);移除:.Remove(i, Length);比较:root.Equals(root2, StringComparison.Ordinal);拆分:split();字符串格式化:{索引(,对齐)[:格式说明符]} 对齐:正为右左为负 常用格式数字说明符:货币C,0#占位,千位,0; @强制识别;"p"百分号 格式号枚举:d-数字.G:字符串; 转义字符常量:\n换行,\t TAb \b退格 \r回车 ;Concat:拼接少量字符串,Compare:比较,Join
面向对象:封装:可以指定该对象的成员的可访问性,可以将无意在对象外部使用的成员隐藏起来,减小编码错误或恶意利用。继承:用于创建可重用、扩展和修改其他类中定义的行为的新类,多态:运行时多态,运行时的类型与声明的类型不再同的特性,继承中使用了override关键字。对像的标识:使用静态Equals()方法,
类:引用类型,通常用于较为复杂的行为建模,或对要在类创建后进行修改的数据建模。类使用 class 关键字进行声明,使用new 调用构造函数来创建对象。支持继承,它继承基类除构造函数以外的所有成员。类只能直接从一个基类继承,可以实现一个以上的接口,但基类自身也可能继承自另一个类,所以类可以间接继承多个基类;抽象基类:用abstract声明,禁止对象实例化,抽象成员:用abstract声明,直接继承该类的非抽象类必须重写该方法,该类本身必须为抽象类,虚成员:用virtual声明,所有派生类都可以用自己的实现重写该方法,用override 来进行声明,从而在运行时呈现多态性,除非有的类用sealed来停止虚拟继承。派生类隐藏基类成员 :使用相同的名称来隐藏,用new来声明,而不呈现多态性。从派生类访问基类成员:base。静态类:静态类不能实例化,在首次使用该类前加载该类,并初始化该类的字段并调用静态构造函数,静态构造函数仅调用一次,在程序驻留的应用程序域的生存器内,静态类一直保留在内存中,特性:只有静态成员(或常量),无法实例化,是密封的,不能包含实例构造函数。静态成员:所有实例共用一个副本,静态字段用法:1)记录实例化的个数2)存储在所有实例共享的值,静态成员在第一次访问之前并且是在调用静态构造函数之前初始化。成员对象:字段:直接在类中声明的任何类型的变量,通常为具有私有或受保护的使用字段,常存储供多个类方法调用的字段;常量:对该类型所有实例都是相同的,用const声明;属性:公开的方法获取或设置值,包括get访问器和set访问器,常用于验证数据,操作其它成员;方法:操作函数;构造函数:对象创建时调用其构造函数,通常用作初始化新对象的成员,静态构造函数用于初始化静态成员或用于执行仅需一次的特定操作,自动调用静态构造函数;析构函数:一个类只能有一个析构函数,无法调用,自动调用的,用~类名()声明,用于资源的显示释放。嵌套类:将包含类型作为构造函数传递给嵌套类型,可访问包含类型。分布类:作用 partial 关键字声明。
接口:使用interface来声明,一个类可以实现多个接口
结构:值类型,不修改数据为主的数据结构。使用struct关键字来进行声明,区别:除非字段被声明为const或static,否则无法初始化,结构不能定义默认构造函数和析构函数,结构的实例化可以不使用new来声明,也可以用new来实例化(默认构造函数或定义的构造函数),不支持继承,但可以实现接口,可以为null。如果结构包含引用类型成员时,必须显示实例化对象。
枚举:用关键字enum来声明,默认情况下,每个元素的基础类型为int,可以指定元素的值,若未指定将自动增,从0开始自动增1,用法:1)常用作提示类型2)作为位标志3)使用system.Enum来操作:获取:Enum.GetName(typeof(),int) int[]=Enum.getValues(typeof()) string[] Enum.getNames(typeof())
索引器:允许类或结构的实例就像数组一样进行索引,使用this[int index]等类似声明,与属性类似,不同之处在于它们的访问器采用参数。
委托:表示对具有特定参数列表和返回类型的方法的引用的类型,实例化委托时,可以将实例与任何具有兼容签名和返回类型的方法相关联,从而通过委托调用方法。委托用于将方法作为参数传递给其他方法。特点:将方法作为参数传递,常用于定义回调方法,多路委托:可以包含多个方法,用+=,-=来运算;实例委托直接用方法名或用new构造或用delegate(){匿名方法)或简化成表达式。
事件:通常用于表示用户操作,类或对象可以通过事件向其它类或对象通知发生的相关事情。发送(或引发}事件的类称为发行者,接收(或处理)事件的类为订户。特点:发行者确定何时引发事件,订户确定执行何种操作来响应事件,一个事件可以有多个订户,一个订户可以处理多个发行者的多个事件,没有订户的事件永远不会引发,编程式事件:基于 EventHandler 委托和 EventArgs 基类的,1)定义自定义数据类:EventArgs 2)在发布类中声明一个委托。 为它指定以 EventHandler 结尾的名称,第二个参数指定自定义 EventArgs 类型3)定义事件:无自定义EventArgs 类的:public event EventHandler RaiseCustomEvent;使用委托的:public event 委托 事件名;3)直接用范型:public event EventHandler<CustomEventArgs> RaiseCustomEvent 4)发布类:定义事件调用方式,订户:事件调用的处理过程
特性:它对程序中的成员进行标注,如类型、字段、方法和属性,用[]声明,常用特性:[Required]必需
范型:最大限度的保护代码,初始化使用default(T)
编程基础-msdn编程指南笔记的更多相关文章
- 大数据技术之_16_Scala学习_04_函数式编程-基础+面向对象编程-基础
第五章 函数式编程-基础5.1 函数式编程内容说明5.1.1 函数式编程内容5.1.2 函数式编程授课顺序5.2 函数式编程介绍5.2.1 几个概念的说明5.2.2 方法.函数.函数式编程和面向对象编 ...
- Spark编程基础_RDD编程
RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变.可分区.里面的元素可并行计算的集合.RDD具有数据流模型的特 ...
- 网络编程基础----并发编程 ---守护进程----同步锁 lock-----IPC机制----生产者消费者模型
1 守护进程: 主进程 创建 守护进程 辅助主进程的运行 设置进程的 daemon属性 p1.daemon=True 1 守护进程会在主进程代码执行结束后就终止: 2 守护进程内无法再开启子进程 ...
- java学习笔记15--多线程编程基础2
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note15.html,转载请注明源地址. 线程的生命周期 1.线程的生命周期 线程从产生到消亡 ...
- (转)C++笔记:面向对象编程基础
非常棒的总结 http://blog.csdn.net/liufei_learning/article/details/21312701 面向对象编程基础 面向对象编程基于三个基本概念: 数据抽象-类 ...
- Java并发编程--基础进阶高级(完结)
Java并发编程--基础进阶高级完整笔记. 这都不知道是第几次刷狂神的JUC并发编程了,从第一次的迷茫到现在比较清晰,算是个大进步了,之前JUC笔记不见了,重新做一套笔记. 参考链接:https:// ...
- Java网络编程和NIO详解开篇:Java网络编程基础
Java网络编程和NIO详解开篇:Java网络编程基础 计算机网络编程基础 转自:https://mp.weixin.qq.com/s/XXMz5uAFSsPdg38bth2jAA 我们是幸运的,因为 ...
- 《逐梦旅程 WINDOWS游戏编程之从零开始》笔记4——Direct3D编程基础
第11章 Direct3D编程基础 2D游戏是贴图的艺术,3D游戏是渲染的艺术.这句话在我学过了之前的GDI编程之后,前一句算是有所体会,现在是来理解后一句的时候了. 安装DirectX SDK配置啥 ...
- [Java入门笔记] 面向对象编程基础(二):方法详解
什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...
随机推荐
- LeetCode(3) || Median of Two Sorted Arrays
LeetCode(3) || Median of Two Sorted Arrays 题记 之前做了3题,感觉难度一般,没想到突然来了这道比较难的,星期六花了一天的时间才做完,可见以前基础太差了. 题 ...
- python 文件及文件夹操作
python 文件.目录操作(新增.移动.删除等) python 文件夹与文件操作 mport string, os, sys dir = '/var' print '----------- no s ...
- c printf
printf的格式控制的完整格式:% - 0 m.n l或h 格式字符下面对组成格式说明的各项加以说明:①%:表示格式说明的起始符号,不可缺少.②-:有-表示左对齐输出,如省略表示右对齐输出.③0:有 ...
- Linq打印
Method syntax: Enumerable.Range(1, 100).ToList().ForEach(Console.WriteLine); Query syntax: (from n i ...
- bzoj3504
这是一道最大流的题目首先要引起注意的是,这类多个起点多个终点的问题一定要同时跑,不能分开来跑由于是无向图,也就相当于从起点跑2*n次好,不难想到s向两个起点连边,两终点想t连边,流量为2*an或2*b ...
- window.alert弹出处理
# -*- coding:utf-8 -*- """ window.alert 处理 """ from selenium import we ...
- [转]33 useful Keyboard Shortcuts for Run commond
原文: http://www.shortcutworld.com/en/win/Run-command.html 1. Calling Run CommandWin + r ...
- c++学习笔记(2)类的声名与实现的分离及内联函数
一.类的声名与实现的分离: 和c函数声明与实现分离类似 有.h : 类的声明 .cpp : 类的实现 在在一个类的cpp中应该包含本类的.h文件 在cpp中类的使用:例: //Circle类 //Ci ...
- duang体加班版
领导第一次让我加班的时候,其实我是拒绝的,因为我觉着加班这个事,不能你让我加我就加,晚了就没有地铁了..领导跟我说可以打车报销.加了一个月之后,我的钱包duang~,后来我知道报销其实是假的,我每天打 ...
- UVA 11427 Expect the Expected(DP+概率)
链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=35396 [思路] DP+概率 见白书. [代码] #include&l ...