[学习笔记]

一、简介

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. 【Android Developers Training】 34. 添加一个简单的分享行为(Action)

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  2. MAC 相关操作解析

    MAC 相关操作解析 OS 显示桌面 f11 F1~F12 fn + F1~F12 撤销重做 command + z command + shift + z 图片预览 选择图片 空格 上下左右 svn ...

  3. maven编译常见错误解决方法整理

    程序包com.sun.xml.internal.ws.spi不存在 当maven项目里面有用到JDK内部的一些类,接口(如:com.sun.xml.internal.ws.spi.ProviderIm ...

  4. (转载)Java内部类的使用小结

    原文摘自:http://android.blog.51cto.com/268543/384844/   内部类是指在一个外部类的内部再定义一个类.类名不需要和文件夹相同. *内部类可以是静态stati ...

  5. vijos1760题解

    题目: 现在有n个人,题目给出了他们每个人所在市县的编号.他们站在一个从左向右的队伍中.小L不在队列中.他想找到一个长度不超过D的区域,使他能够找到最多的不同地方的朋友.要求输出能找到的朋友所在不同市 ...

  6. 基于GTID的Mysql-Mha高可用方案探索

    声明: 本篇文章内容整理来源于互联网以及本人自己的梳理总结,目的是从零到一的搭建起来mysql mha高可用架构. 一.软件概述 MHA(Master High Availability)目前在MyS ...

  7. 剖析touch事件在View中的传递

    话不多说,直奔主题,先来看一张图 版权申明:这是csdn上别人的图,我觉得有用,就拿过来了, 然后简单说明下: 总的来说,触摸事件是从最外层的ViewGroup,一级一级传递进来的 和这相关的每个Vi ...

  8. Android使用ViewPager实现导航菜单

    首先设置页面的Fragment布局: public class TabFragment extends ListFragment { @Override public void onViewCreat ...

  9. Laravel安装及环境的配置(XAMPP集成开发环境下)

    Laravel 使用 Composer 来管理代码依赖.所以,在使用 Laravel 之前,请先确认你的电脑上安装了 Composer. 操作系统为win7: 集成开发环境XAMPP: 第一步:安装C ...

  10. 编写高质量代码改善C#程序的157个建议:第17个建议之多数情况下使用foreach进行循环遍历

    今天是我看<编写高质量代码:改善C#程序的157个建议>第二遍的时候了,看完这本书的确是受益匪浅,学到了很多东西,也明白了很多道理. 里面的代码我每个都调试了一遍,有时候是有些出入的,可能 ...