C#快速入门
[学习笔记]
一、简介
1、C#是由Anders Hejlsberg和他的团队在.Net框架开发期间开发的;是.Net框架的一部分。
C#是专为公共语言基础结构(CLI)设计的,CLI由可执行代码和运行时环境组成,允许在不同计算机平台和体系结构上使用各种高级语言。
2、C#是大小写敏感的,每条语句都以 ; 结尾。程序执行从main开始,与Java不同的是,文件名可以不同于类名称;一个文件里可以有多个class;
3、Console.Write() 打印,一次同时打印多个参数可用占位符{0}...类似于format,后边用逗号隔开依次要输入各位的参数;
4、Console.ReadLine() 输入;
5、Console.ReadKey() 等待按键;
6、// 或者 /*...*/ 注释
7、hello world
//hello world !
using System; //使用系统命名空间
namespace HelloWorldApplication //声明命名空间
{
class HelloWorld //class声明
{
static void Main(string[] args) /* main 方法 */
{
/* 我的第一个 C# 程序*/
Console.WriteLine("Hello World");
Console.ReadKey();
}
}
}
二、基础
1、数据类型
bool 布尔值
byte 8位无符号整数(0到255)
char 16位Unicod字符
decimal 128位精确的十进制值,-29位有效数
double 64位双精度浮点型
float 32位单精度浮点型
int 32位有符号整型
long 64位有符号整型
sbyte 8位有符号整型
short 16位有符号整型
uint 32位无符号整型
ulong 64位无符号整型
ushort 16位无符号整型
可用sizeof(type)方法来获取一个变量在特定平台上的准确尺寸;
string 字符串可用引号和@引导,用@引导时称作“逐字字符串”,此时转义字符会被当作普通字符处理,且可进行任意的换行和缩进处理;多个字符串可用+号连接
type* name 指针类型
dynamic 动态类型
const 常量
nullable 可空类型(声明:<data_type> ? <variable_name> = null;合并运算符 ?? 用于定义可空类型和引用类型默认值,如果不为空则为??前边的值,如果给定值为空,则用??后边的默认值)
2、数据类型转换
显示类型转换(强制转换)
double d = 1.23;
int x;
i = (int)d;
3、内置类型转换方法
ToBooolean 如果可能的话,把类型转换为布尔型
ToByte 把类型转换为字节类型
ToChar 如果可能的话,把类型转换为单个Unicode字符类型
ToDateTime 把类型转换为时间结构
ToDecimal 把浮点型或整数类型转换为十进制类型
ToDouble 把类型转换为双精度浮点型
ToInt16 把类型转换为16位整数类型
ToInt32 把类型转换为32位整数类型
ToInt64 把类型转换为64位整数类型
ToSbyte 把类型转换为有符号字节类型;
ToSingle 把类型转换为有符号字节类型
ToString 把类型转换为字符串类型
ToType 把类型转换为指定类型
ToUInt16 把类型转换为16位无符号整数类型
ToUInt32 把类型转换为32位无符号整数类型
ToUInt64 把类型转换为64位无符号整数类型
示例:
int i = ;
i.ToSingle(); string locstr = .ToString();
//如果要将"locstr"转成整型数
//方法一: 用 Convert
int i = Convert.ToInt16(locstr);
//方法二: 用 Parse
int ii = int.Parse(locstr);
4、数据装箱与拆箱
装箱(值类型转换为对象类型)
int x = ;
object ob = x;
拆箱(之前由值类型转换而来的对象类型再转回值类型)
int x = ;
object ob = x;
int y = (int)ob
5、运算符
算术运算符:+,-,*,/,%,++,--
关系运算符:==,!=,>,<,>=,<=
逻辑运算符:&&,||,!
位运算符:&,|,^,~,<<,>>
赋值运算符:=,+=,-=,*=,/=,%=,<<=,>>=,^=,|=
其他运算符:
sizeof() 返回数据类型的大小
typeof() 返回class类型
& 返回变量的地址
* 变量的指针
?: 条件表达式
is 判断对象是否为某一类型
as 强制转换,即使失败也不会抛出异常
6、数组(Array)
声明: datatype[] arrayName;
初始化: double[] a = new double[10],可使用foreach来遍历数组:foreach (double i in a)
C#支持多维数组;在定义一个新数组时[ ]也可以不给定个数。
7、结构(struct)
struct name
{
Access_Specifier type name
}
C#中结构与C或C++相比有以下特点:
1)结构可带有方法、字段、索引、属性、运算符方法和事件;
2)结构可定义构造函数,但不能定义析构函数;但也不能定义默认的构造函数;
3)与类不同,结构不能继承其他结构或类的基础结构;
4)结构可实现一个或多个接口;
5)结构成员不能指定为abstract、virturl或protected;
6)当使用New操作符创建一个结构对象时,会调用适当的构造函数来创建结构;但结构可不使用New操作符即可被实例化;
7)如果不使用New操作符,只有在所有的字段都被初始化之后,字段才被赋值,对象才被使得;
8、枚举(Enum)
enum <enum_name>
{
enumeration list
}
默认枚举的第一个符号的值是0,但也可以自己指定每个符号的值。
三、控制结构
1、if...else语句
if...else
if(boolean_expression){
}
else if{
}
else{
}
2、switch语句
switch(expression){
case const-expression:
statement(a);
break;
case const-expression:
statement(b);
break;
default:
statement(c);
break;
}
3、while循环
while(condition){
statement;
}
4、do...while循环
do{
statement;
}while(condition);
5、for循环
for(init;condition;increment){
conditional code;
}
6、函数
<Access Specifier> <Return Type> <Method Name>(Parameter List)
{
Method Body;
}
四、面向对象编程(Class)
1、C#的封装
public 所有对象都可以访问;
private 对象本身在对象内部可以访问;
protected 只有该类对象及其子类对象可以访问;
internal 同一个程序集的对象可以访问;
protected internal 一个程序集内的对象,或者该类对象及其子类可以访问;
2、类的定义
<access specifier> class class_name
{
<access specifier> <data_type> variable_name1;
<access specifier> <data_type> variable_name2;
...
<access specifier> <return_type> method1(parameter_list){
body;
}
<access specifier> <return_type> method1(parameter_list){
body;
}
...
}
3、构造函数
类的一个特殊成员函数,当创建类的新对象时执行;构造函数名称与类名称完全相同,但它没有任何返回类型。
默认的构造函数没有任何参数,但也可以有参数,这种方法可以帮助在创建对象同时给对象赋初始值。
4、析构函数:
类的一个特殊成员函数,当类的对象超出范围时执行;
析构函数的名称是在类的名称前加上一个 ~ 作为前缀,它不返回值,也不带参数;
析构函数用于在结束程序之前释放资源。析构函数不能继承或重载;
5、类的继承:
class <derived_class> : <base_class>{
}
对于构造函数的继承需要在参数后加 : baseMethod(parameter_list)
对于声明为sealed类为密封类,密封类不能被继承。
C#不支持多重继承,但可以通过接口来实现。
6、函数重载
在同一个范围内对相同的函数名有多个定义,但函数的定义必须彼此不同,可以是参数类型不同,也可以是个数不同,但不能只有返回类型不同。
7、动态多态性(抽象类和虚方法)
使用abstract关键字创建抽象类,用于提供接口的部分类的实现。当一个派生类继承自该抽象类时,实现即完成;抽象类包含抽象方法,抽象方法可被派生实现;
继承一个抽象方法时用override声明;
不能创建一个抽象类的实例;
不能在一个抽象类外部声明一个抽象方法;
抽象类不能被声明为sealed。
虚方法用virtual声明,在不同的继承类中有不同的实现,对虚方法的调用是在运行时发生的。
8、运算符的重载
在类中对运算符的重新定义,通过关键字operator+运算符 来定义的;
只有算术运算符和比较运算符可以被重载。
9、接口(interface)
接口定义了所有类继承接口时应遵循的语法合同,定义了属性、方法和事件;接口使得实现接口的类或结构在形式上保持一致。
接口使用interface声明,后边接接口名称即可。
接口的继承和类一样,类继承接口时必须先在static void main()中实例一个当前的类,然后调用接口的方法,再实现接口的方法。
附:
1、命名空间(namespace)
用于提供一种让一组名称与其他名称分隔开的方式。在同一程序内使用多个命名空间,在调用其他的类或方法时需用命名空间名后跟 . 进行定位区分。
也可以使用using来提前命名空间。(using还可以用于给很长的路径起别名)
命名空间可以进行嵌套。
2、预处理器指令:
#define 定义一系列成为符号的字符;
#undef 取消定义符号;
#if 测试符号是否为真;
#else 与#if一起使用;
#elif 与#if一起使用;
#endif 指定一个条件指令的结束;
#line 修改编译器的行数及输出错误和警告的文件名;
#error 允许代码的指定位置生成一个错误;
#warning 允许代码的指定位置生成一级警告;
#region 指定一个可展开或折叠的代码块;
#endregion 与#region一起用,表示结束。
补充提高内容:https://www.cnblogs.com/aland-1415/p/9347915.html
C#快速入门的更多相关文章
- Web Api 入门实战 (快速入门+工具使用+不依赖IIS)
平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...
- SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)
SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...
- 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)
今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...
- 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- Mybatis框架 的快速入门
MyBatis 简介 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果 ...
- grunt快速入门
快速入门 Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用.:奇数版本 ...
- 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- 【第四篇】ASP.NET MVC快速入门之完整示例(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- Vue.js 快速入门
什么是Vue.js vue是法语中视图的意思,Vue.js是一个轻巧.高性能.可组件化的MVVM库,同时拥有非常容易上手的API.作者是尤雨溪,写下这篇文章时vue.js版本为1.0.7 准备 我推荐 ...
随机推荐
- JS综合练习
练习一.任意数求和(最多输入十位数),输入999终止 运行代码 <!DOCTYPE html><html> <head> <meta charset=&quo ...
- SequoiaDB x Spark 新主流架构引领企业级应用
6月,汇集当今大数据界精英的Spark Summit 2017盛大召开,Spark作为当今最炙手可热的大数据技术框架,向全世界展示了最新的技术成果.生态体系及未来发展规划. 巨杉作为业内领先的分布式数 ...
- Java虚拟机-----------Java内存区域与内存溢出异常
Java内存区域划分 Java虚拟机运行时的数据区大致可划分为五部分:方法区,堆(两部分组成Java堆内存),虚拟机栈,本地方法栈(Java栈内存),程序计数器. 1.程序计数器 程序计数器占较小的内 ...
- ASP.NET Core 四种释放 IDisposable 对象的方法
本文翻译自<Four ways to dispose IDisposables in ASP.NET Core>,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! IDispos ...
- golang路上的小学生系列--使用reflect查找package路径
本文同时发布在个人博客chinazt.cc 和 gitbook 今日看到了一个有趣的golang项目--kolpa(https://github.com/malisit/kolpa). 这个项目可以用 ...
- opencv如何实现【不用全局变量进行滚动条控制】
opencv中自带滚动条,其中一个问题是该回调函数(on_trackbar)大多使用的是全局变量,大型项目调试时弊端众多,比如下图: 为此,留意了void on_Trackbar(int par1, ...
- Servlet端 接收不到4096,8192长度的JSON参数
Servlet端的日志显示,客户端传过来的JSON参数是空值. 但是在客户端的日志显示,已将JSON参数传送过去. 经调查发现,加减1位后的JSON参数均可以正常传送. 只有8192,4096长度的J ...
- 响应式移动端去除css的hover和jq的hover还有input在苹果下的默认样式
去除css的hover: /*直接给body添加ontouchstart*/ <body ontouchstart> 去除jq的hover: var winW01 = $(window). ...
- 基于封装通用的EF CRUD 的操作
1. Entity Framework是Microsoft的ORM框架,随着 Entity Framework 不断的完善强化已经到达了EF 6.0+ 还是非常的完善的,目前使用的比例相对于其他OR ...
- springmvc(四) springmvc的数据校验的实现
so easy~ --WH 一.什么是数据校验? 这个比较好理解,就是用来验证客户输入的数据是否合法,比如客户登录时,用户名不能为空,或者不能超出指定长度等要求,这就叫做数据校验. 数据校验分为客户端 ...