C#快速入门指南
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#快速入门指南的更多相关文章
- AngularJS快速入门指南20:快速参考
thead>tr>th, table.reference>tbody>tr>th, table.reference>tfoot>tr>th, table ...
- AngularJS快速入门指南19:示例代码
本文给出的大部分示例都可以直接运行,通过点击运行按钮来查看结果,同时支持在线编辑代码. <div ng-app=""> <p>Name: <input ...
- AngularJS快速入门指南18:Application
是时候创建一个真正的AngularJS单页面应用程序了(SPA). 一个AngularJS应用程序示例 你已经了解了足够多的内容来创建第一个AngularJS应用程序: My Note Save Cl ...
- AngularJS快速入门指南17:Includes
使用AngularJS,你可以在HTML中包含其它的HTML文件. 在HTML中包含其它HTML文件? 当前的HTML文档还不支持该功能.不过W3C建议在后续的HTML版本中增加HTML import ...
- AngularJS快速入门指南16:Bootstrap
thead>tr>th, table.reference>tbody>tr>th, table.reference>tfoot>tr>th, table ...
- AngularJS快速入门指南15:API
thead>tr>th, table.reference>tbody>tr>th, table.reference>tfoot>tr>th, table ...
- AngularJS快速入门指南14:数据验证
thead>tr>th, table.reference>tbody>tr>th, table.reference>tfoot>tr>th, table ...
- AngularJS快速入门指南13:表单
一个AngularJS表单是一组输入型控件的集合. HTML控件 HTML输入型标签标包括: input标签 select标签 button标签 textarea标签 HTML表单 HTML表单将各种 ...
- AngularJS快速入门指南12:模块
AngularJS模块定义了一个application. 模块是一个application中不同部分的容器. application中的所有控制器都应该属于一个模块. 带有一个控制器的模块 下面这个a ...
- AngularJS快速入门指南11:事件
AngularJS拥有自己的HTML事件指令. ng-click指令 ng-click指令定义了AngularJS的click事件. <div ng-app="" ng-co ...
随机推荐
- 面试官:来谈谈限流-RateLimiter源码分析
RateLimiter有两个实现类:SmoothBursty和SmoothWarmingUp,其都是令牌桶算法的变种实现,区别在于SmoothBursty加令牌的速度是恒定的,而SmoothWarmi ...
- 在vue项目中通过iframe引入jquery项目
最近公司因为原来的jq框架存在的问题太多,所以要进行主题框架的重新搭建,我使用的vue进行的主题框架的重新搭建,但是原来的页面已经完成很多了,而且都是使用的jquery进行开发的 在vue中引入jqu ...
- iOS开发 简单实现视频音频的边下边播 (转)
1.ios视频音频边缓存边播放,缓存时可以在已下载的部分拖拽进度条. 3.无论是下载到一半退出还是下载完退出,已缓存的数据都存到自己指定的一个路径.如果已下载完,下次播放时可以不再走网络,直接播放 ...
- leetcode整理(一)
leetcode题目整理,基本上不是最优解 1. 回文数 判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121 输出: true 示例 ...
- 使用python实现后台系统的JWT认证
介绍 JWT协议似乎已经应用十分广泛,JSON Web Token--一种基于token的json格式web认证方法.基本的原理是,第一次认证通过用户名密码,服务端签发一个json格式的token.后 ...
- mysql中的case when then 的用法
将立立饭饭的性别变更为女 ,烦烦 嗯嗯 问我的性别变更为男 update `table` set sex = ( case when sname in('立立','饭饭') then '女' else ...
- mysql-存储过程-触发器-事务---4
本节所讲内容: 存储过程 触发器 事务 一.存储过程 什么是存储过程 大多数SQL语句都是针对一个或多个表的单条语句.并非所有的操作都怎么简单.经常会有一个完整的操作需要多条才能完成.存储过程(S ...
- 201871010123-吴丽丽 《面向对象程序设计(Java)》第十周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业要求在哪里 https://www.cnblogs.com/nwnu-daizh/p/ ...
- DNS分离解析
实验环境: 一台内网(client)1块网卡:一台网关(dns)2块网卡:一台外网1块网卡 DNS服务器开启路由转发 [root@localhost ~]# vi /etc/sysctl.conf n ...
- mac pro下安装安装 SymPy 和 matplotlib报错解决方案
因为自己写python分析时候要用到这两个库,但是mac 上安装不成功.原来是要安装原来装 matplotlib 之前先要安装 freetyp 和 libpng. brew install freet ...