[学习笔记]

一、简介

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#快速入门的更多相关文章

  1. Web Api 入门实战 (快速入门+工具使用+不依赖IIS)

    平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...

  2. SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)

     SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...

  3. 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)

    今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...

  4. 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  5. 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  6. Mybatis框架 的快速入门

    MyBatis 简介 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果 ...

  7. grunt快速入门

    快速入门 Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用.:奇数版本 ...

  8. 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  9. 【第四篇】ASP.NET MVC快速入门之完整示例(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  10. Vue.js 快速入门

    什么是Vue.js vue是法语中视图的意思,Vue.js是一个轻巧.高性能.可组件化的MVVM库,同时拥有非常容易上手的API.作者是尤雨溪,写下这篇文章时vue.js版本为1.0.7 准备 我推荐 ...

随机推荐

  1. JS综合练习

    练习一.任意数求和(最多输入十位数),输入999终止 运行代码 <!DOCTYPE html><html> <head> <meta charset=&quo ...

  2. SequoiaDB x Spark 新主流架构引领企业级应用

    6月,汇集当今大数据界精英的Spark Summit 2017盛大召开,Spark作为当今最炙手可热的大数据技术框架,向全世界展示了最新的技术成果.生态体系及未来发展规划. 巨杉作为业内领先的分布式数 ...

  3. Java虚拟机-----------Java内存区域与内存溢出异常

    Java内存区域划分 Java虚拟机运行时的数据区大致可划分为五部分:方法区,堆(两部分组成Java堆内存),虚拟机栈,本地方法栈(Java栈内存),程序计数器. 1.程序计数器 程序计数器占较小的内 ...

  4. ASP.NET Core 四种释放 IDisposable 对象的方法

    本文翻译自<Four ways to dispose IDisposables in ASP.NET Core>,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! IDispos ...

  5. golang路上的小学生系列--使用reflect查找package路径

    本文同时发布在个人博客chinazt.cc 和 gitbook 今日看到了一个有趣的golang项目--kolpa(https://github.com/malisit/kolpa). 这个项目可以用 ...

  6. opencv如何实现【不用全局变量进行滚动条控制】

    opencv中自带滚动条,其中一个问题是该回调函数(on_trackbar)大多使用的是全局变量,大型项目调试时弊端众多,比如下图: 为此,留意了void on_Trackbar(int par1, ...

  7. Servlet端 接收不到4096,8192长度的JSON参数

    Servlet端的日志显示,客户端传过来的JSON参数是空值. 但是在客户端的日志显示,已将JSON参数传送过去. 经调查发现,加减1位后的JSON参数均可以正常传送. 只有8192,4096长度的J ...

  8. 响应式移动端去除css的hover和jq的hover还有input在苹果下的默认样式

    去除css的hover: /*直接给body添加ontouchstart*/ <body ontouchstart> 去除jq的hover: var winW01 = $(window). ...

  9. 基于封装通用的EF CRUD 的操作

    1.  Entity Framework是Microsoft的ORM框架,随着 Entity Framework 不断的完善强化已经到达了EF 6.0+ 还是非常的完善的,目前使用的比例相对于其他OR ...

  10. springmvc(四) springmvc的数据校验的实现

    so easy~ --WH 一.什么是数据校验? 这个比较好理解,就是用来验证客户输入的数据是否合法,比如客户登录时,用户名不能为空,或者不能超出指定长度等要求,这就叫做数据校验. 数据校验分为客户端 ...