C#

集成开发环境

Visual Studio

结构

using System;

包含 System 命名空间

class hello{    /*注释*/
static void Main(string\[\] args){
//一个文件一个main函数
}
}

结构体

struct Books{变量...}

结构不支持继承。
结构不能声明默认的构造函数

枚举

enum Day { Sun, Mon, tue, Wed, thu, Fri, Sat };

Day.Sun==0

Day.Mon==1

接口

public interface PaintCost {int getCost(int area);}

派生类

class Rectangle : hello, PaintCost{}

全析

namespace first{

命名空间声明

    public class Test{

可以多个class
构造函数、析构函数、静态成员...

变量...

		decimal a=10;

128 位精确的十进制值,28-29 有效位数

		sbyte b=2;

8 位有符号整数类型

		uint c;

32 位无符号整数类型

		ulong d;

64 位无符号整数类型

		ushort e;

16 位无符号整数类型

		dynamic f=a,g=b;

存储任何类型的值在动态数据类型变量中

字符串

		"hhh\"hhh\nhhh"	==
@"hhh"hhh\nhhh" ==
@"hhh"hhh
hhh"
"hhh" + "hhh"

字符串一堆方法:拆分,复制...

可空类型,即可以赋值为null

		int? a,b=null;	//a==null
int a; //a==0

合并运算符

		int b=a ?? 5;	//a为null则b=5,否则b=a

多维数组

		int [,] a = new int [3,4] {
{0, 1, 2, 3} , /* 初始化索引号为 0 的行 */
{4, 5, 6, 7} , /* 初始化索引号为 1 的行 */
{8, 9, 10, 11} /* 初始化索引号为 2 的行 */
};

交错数组

		int[][] scores = new int[5][];
for (int i = 0; i < scores.Length; i++)
scores[i] = new int[4];

Array 类

		scores.Rank;	//获取数组的秩(维度)
scores.Length;
Array.Copy(Array, Array, Int32);
/*从数组的第一个元素开始复制某个范围的元素
到另一个数组的第一个元素位置*/

其他运算符

		&a	//地址
*a //指针
obj is Car // 检查 obj 是否是 Car 类的一个对象。
obj as int //强制转换,即使转换失败也不会抛出异常。

常量

		const

其他常量例如8进制数

		0213

装箱与拆箱

		object obj;
obj = 100; //这是装箱
int a=obj as int; //这是拆箱

循环

		foreach(变量 in 数组){}

方法...

		public int plus(int a){return a+1;}

重载

		public int plus(char a){return a+2;}

运算符重载

		public static Box operator+ (Box b, Box c){...}

可重载

  • +, -, !, ~, ++, -- ( op-type operand )

  • +, -, *, \/, %,==, !=, <, >, <=, >= ( op-type operand, op-type2 operand2 )

不可直接重载

  • &&, ||

不可重载

  • +=, -=, *=, /=, %=,=, ., ?:, ->, new, is, sizeof, typeof

按值传递

		(int a)

引用

		(ref int a)

按输出传递,即变量最后一个值赋回去

		(out int a)

传递数组给函数

		(int[] a)

参数数组

		int plus(params int[] arr)

传递时:

		plus(512, 720, 250, 567, 889)

访问权限

public:所有对象都可以访问;
internal:同一个程序集的对象可以访问;
protected internal:访问限于当前程序集或派生自包含类的类型。

	}
}

命名空间声明

namespace second{
public class Test{
}

嵌套命名空间

	namespace second{
}
}

命名空间运用

class TestClass{
void hhh(){
first.Test;
second.Test;
}
}

using指令

using second;		//using指令:引入命名空间
using static System.Math; //指定无需指定类型名称即可访问其静态> 成员的类型
using Project = PC.MyCompany; //起别名
using (Font font3 = new Font("Arial", 10.0f), //将实例与代码绑定
font4 = new Font("Arial", 10.0f))

预处理器指令

#define PIQ	//定义一系列成为符号的字符
#if(PIW) {不会执行} //测试符号是否为真
#elif(PIQ) {会执行}
#else {}
#endif //指定一个条件指令的结束
#undef PIQ //取消定义符号 #line number filename //修改编译器的行数以及(可选地)输出错> 误和警告的文件名
#line default //恢复默认行号
#error 你错了! //从代码的指定位置生成一个错误
#warning 你就错了! //从代码的指定位置生成一级警告
#pragma warning disable 169 //取消编号 169 的警告(即字段> 未使用的警告)
#pragma warning restore 169 // 恢复编号 169 的警告 #region //在使用 Visual Studio Code Editor 的大纲特性时,指定一个可展开或折叠的代码块
#endregion //标识着 #region 块的结束

示例用法

#define  CONNECT(a,b)   a##b	//##粘连两个标识符,只有宏定义中使用(#define)
int CONNECT(a,1); //int a1

传统方式:

typedef struct _tag_Student Student;
struct _tag_Student{
char* name;
int id;
};

用宏定义方式

#define STRUCT(type)    typedef struct _tag_##type type;\
struct _tag_##type
STRUCT(Student){
char* name;
int id;
};

异常处理

try	{throw a;}		//a为throwable
catch(a) {}
finally {}

在 catch 块中使用 throw 语句来抛出当前的对象

class _throw{
void _throw(){
try{
MethodThatThrowsException();
}
catch (Exception ex){
//和根本不存在这个catch块的时候一样
throw;
}
catch (Exception ex){
//stack trace认为你catch到的异常已经被处理了
//只不过处理过程中又抛出新的异常
//这时候stack trace就把throw ex;当作错误根源了
throw ex;
}
catch (Exception ex){
//stack trace会自动认为内部异常是导致当前异常的原因
//也就会把内部异常的stack trace也递归显示出来
throw new Exception("oops!", ex);
}
}}

System.ApplicationException 类:

支持由应用程序生成的异常。所以程序员定义的异常都应派生自该类。

输入与输出

using System;
class _IO{
void _IO(){
console.write("C#很迷");
console.writeline("显示的信息");
Console.WriteLine("第一个学生的姓名{0},成绩{1}",name1,score1);
//“格式字符串”和变量列表,当有多个变量需要输出时可以使用该方法
//{0}、{1}叫做占位符,代表后面依次排列的变量表
console.readkey(); //等待用户按下任意键,一次读入一个字符
console.readline(); //string,当用户按下enter键的时候一次读取一行
convert.toint32/todouble("32"); //convert用于不同类型数据之间的转化
int.Parse("32"); //这个也能转化
}}

正则表达式:匹配专用,可以用于输入readline()的整理

Regex 类用于表示一个正则表达式

自己去看吧~

文件的输入与输出

特性,类似于Java的/**   */,生成说明注释**

[attribute(positional_parameters, name_parameter = value, ...)]

class || method || 变量 ......
自己去看吧~

反射:

允许在运行时查看特性(attribute)信息。
允许审查集合中的各种类型,以及实例化这些类型。
允许延迟绑定的方法和属性(property)。
允许在运行时创建新类型,然后使用这些类型执行一些任务。

不安全代码

由于C#中声明的变量在内存中的存储受垃圾回收器管理;因此一个变量(例如一个大数组)有可能在运行过程中被移动到内存中的其他位置。如果一个变量的内存地址会变化,那么指针也就没有意义了。

解决方法就是使用fixed关键字来固定变量位置不移动。

int[]  list = {10, 100, 200};
fixed(int *ptr = list)

或者在方法上标明unsafe

public unsafe static void Main(){
int var = 20;
int* p = &var;
}

或程序里标明unsafe

unsafe{	int var = 20;
int* p = &var;
}

注意,编译时需要命令行编译或者修改编译器设置

C#快速入门指南的更多相关文章

  1. AngularJS快速入门指南20:快速参考

    thead>tr>th, table.reference>tbody>tr>th, table.reference>tfoot>tr>th, table ...

  2. AngularJS快速入门指南19:示例代码

    本文给出的大部分示例都可以直接运行,通过点击运行按钮来查看结果,同时支持在线编辑代码. <div ng-app=""> <p>Name: <input ...

  3. AngularJS快速入门指南18:Application

    是时候创建一个真正的AngularJS单页面应用程序了(SPA). 一个AngularJS应用程序示例 你已经了解了足够多的内容来创建第一个AngularJS应用程序: My Note Save Cl ...

  4. AngularJS快速入门指南17:Includes

    使用AngularJS,你可以在HTML中包含其它的HTML文件. 在HTML中包含其它HTML文件? 当前的HTML文档还不支持该功能.不过W3C建议在后续的HTML版本中增加HTML import ...

  5. AngularJS快速入门指南16:Bootstrap

    thead>tr>th, table.reference>tbody>tr>th, table.reference>tfoot>tr>th, table ...

  6. AngularJS快速入门指南15:API

    thead>tr>th, table.reference>tbody>tr>th, table.reference>tfoot>tr>th, table ...

  7. AngularJS快速入门指南14:数据验证

    thead>tr>th, table.reference>tbody>tr>th, table.reference>tfoot>tr>th, table ...

  8. AngularJS快速入门指南13:表单

    一个AngularJS表单是一组输入型控件的集合. HTML控件 HTML输入型标签标包括: input标签 select标签 button标签 textarea标签 HTML表单 HTML表单将各种 ...

  9. AngularJS快速入门指南12:模块

    AngularJS模块定义了一个application. 模块是一个application中不同部分的容器. application中的所有控制器都应该属于一个模块. 带有一个控制器的模块 下面这个a ...

  10. AngularJS快速入门指南11:事件

    AngularJS拥有自己的HTML事件指令. ng-click指令 ng-click指令定义了AngularJS的click事件. <div ng-app="" ng-co ...

随机推荐

  1. NetCoreApi框架搭建(一、swagger插件使用)

    1.首先用vs2017创建新的项目 2.开始引入swagger插件 右击项目=>管理NuGet程序包=>搜索Swashbuckle.AspNetCore点击安装 3.打开Startup.c ...

  2. identityServer3+ADFS实现域用户登录授权

    准备: ADFS安装配置 https://www.cnblogs.com/luoyedemeng/articles/9837685.html 添加一个Providers private void Co ...

  3. Locust 接口性能测试 - 转载一 (后期熟悉实践自己出一套完整的)

    转载大佬   ,.. 另外一篇:https://www.cnblogs.com/imyalost/p/9758189.html记录一下接口性能测试的学习 先熟悉一下概念: Locust是使用Pytho ...

  4. 剑指 Offer——1. 二维数组中的查找

    题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...

  5. 不了解MES系统中的看板管理?看完本文就懂了

    如果想要在生产车间中,让生产过程管理都处在“看得见”的状态,那么看板可视化管理的导入是你的不二选择. MES看板包括四个部分:生产任务看板.各生产单位生产情况看板.质量看板和物料看板,其中生产任务看板 ...

  6. loadView的原理

    其他的小记: 1.控制器的view是怎么创建的 当外界第一次使用当前控制器的view时,会调用当前一个方法loadView,创建控制器的view: 控制器的view是懒加载的,什么时候使用,什么时候才 ...

  7. jar 冲突、class 冲突的检测脚本

    思路很简单,解开war包,解开 jar 包,发现有同名 package.class 就报出来,不管是否“兼容” .. import zipfile import io from collections ...

  8. CentOS6.7安装Oracle数据库

  9. 基于VLC库C#开发可播放摄像头及任意格式视频的播放器

    前言 本文主要讲述,在WPF中,借助Vlc.DotNet调用VLC类库,实现视频播功能,下面我们先来做开发前的准备工作. 准备工作 首先,我们创建一个项目WpfVLC,然后,进入Neget搜索Vlc. ...

  10. i++和++1

    概述:i++和++i 这个问题困扰了我很长时间,在这段时间里自己不止一次的怀疑自己的智商,难道自己对编程一点天赋都没有吗?此问题严重打击了我的自信心.......也曾苦苦暗自琢磨,也曾百度谷歌疯狂搜索 ...