C# 基础(2)
打开一个解决方案,以.sin后缀名,.csproj是项目文件的后缀名。
Console.WriteLine("这是我的第二个项目!");你想显示的内容 Console.ReadKey();
当程序执行到Console.ReadKey(); 时,程序会停到这里,等待用户从键盘上键入一个键,用户键入这个键后,程序才继续执行。
在C#中,每一句都必须以分号结束。
WriteLine与Write的区别是有没有换行。
设置VS环境中的字体与行号 :工具->选项
在C#中注释符:对我们写的程序进行解释,注释是给人看的。有三种:
① 单行注释,以//开始到本行结束
② 多行注释,以/*开始,以*/结束
③ 文档注释,用于类和方法进行注释,在类和方法签名连续输入3个 /
常用键:HOME END PageUP PageDown DELT
下面一对指令,可以折叠一堆代码
#region 和#endregion
.NET是一种多语言的开发平台,开发.NET可以用多达十几种语言进行开始。
.NET框架平台包括 语言 VC++、C#、VB.NET等
.NET FrameWork 类库(FCL)
公共语言运行库(CLR)
操作系统:
C#通过C#编译器,编译成MSIL(微软中间语言)->CLR(公共语言运行库),代码被执行。
变量:
计算机使用内存(RAM ,Random access momory)来储存数据,内存用于存储计算机正在运行的数据,断电后后面的数据丢失。保存数据之后就将数据从内存转到硬盘中。
运行中,计算机给内存编址,变量代表着一块内存空间,我们可以通过变量名向内存存/取数据,有变量就不需要我们记忆复杂的内存地址。
去宾馆登记入住
要在计算机中存一个数据1000,需要2句话。
申请一块内存空间,考虑类型
int number;
number = 1000; 其中=赋值运算符,将数值1000放入内存空间。
数值(整数int、非整数即小数(double、decimal))
数据类型
非数值(char、string)
Double 小数精度15到16位
Char 字符型 只能存储一个字符,并且存储的这个字符用单引号引起来.’A’
String 字符串类型,就是把0个或1个或多个字符连接起来,要求用双引号引起来。”string”
Decimal 精度28到29位,主要用于财务上。
在C#开发环境中,直接写一个有小数点得数字,这个数字就是double类型。在此小数后面加一个m/M,这就是告诉编译器,此小数是decimal类型。
变量声明的方法,有3种:
① 先声明,后赋值;
② 定义变量时,直接赋值;
③ 可以一次声明多个同类型的变量,多个变量名称之间用逗号隔开,最后以分号结束。
注:变量要先声明,后赋值,最后使用(取值或调用这个变量或写这个变量)。
变量的命名规则:
1、 必须以“字母”_ @符号开头(不能以数字开头)
2、 后面可以跟任意的“字母”、数字和下划线。
注意:
1、 变量名不予系统中的关键字重复
2、 在C#中,大小写敏感
3、 同一个变量名不允许重复定义
定义的变量名要有意义。
C#中变量命名编码规范,有两种:
Camel命名法:首个单词的首字母小写,其余单词的首字母大写。在Main()方法中的定义变量采用Camel命名法。
Pascal命名法:每个单词的首字母均大写。
如果使用大英语单词的缩写,全部要用大写。
赋值运算符(=)和赋值表达式
优先级最低的
a= a+1
先把a取出来,相加再赋值
注:变量可以重复赋值,一旦给一个变量附了新值,那么变量中的老值就不存在了。
一般情况下,变量只能定义一次,但可以多次赋值,再次赋值是,会把变量中的值给覆盖掉了。
“+”在C#中有两种意义:
1)是数学中的加法;两边参与加法运算的是数值类型
2)是连接的意思,如果两边参与的是“+”运算的数据,有一个是字符串类型。
整理于2012-02-27
C#中数据类型包括两种,一种是值类型,一种是引用类型,值类型是直接存储值,而引用类型存储的是值得引用。
引用类型的变量又称为对象,可存储对实际数据的引用。Class、interface、delegate都可以用于声明引用类型。
C#中有两个内置的引用类型,object类型和string 类型,
1)object类型
object类型在.NET中是Object的别名,在C#中,所有的类型,都可以直接或间接从Object继承。可以将任何类型的值赋给object变量。
class ObjectClass
{
public int i = 60;
}
class Program
{
static void Main(string[] args)
{
object a = 1;
Console.WriteLine(a);
Console.WriteLine(a.GetType ());//取得当前的类型
Console.WriteLine(a.ToString ());
Console.WriteLine();
a = new ObjectClass();//重新实例化变量a
ObjectClass classRef;
classRef = (ObjectClass)a;//引用调用
Console.WriteLine(classRef.i);
Console.Read();
}
}
string 类型表示Unicode字符的字符串,它是.NET中的String别名,字符串是不可改变的,字符串对象一旦被创建,其内容就不能更改。
string a = "hello";
string c = "h";
c = c + "ello";
Console.WriteLine(a==c);
Console.WriteLine((object )a==(object )c);//a和c引用的不是同一个字符串实例
int i= Console.Read();
Console.WriteLine(i);
// Console.WriteLine(Console.ReadKey() );
Console.WriteLine();
Console.ReadKey();
装箱与拆箱
装箱是将值类型转换为引用类型object,这使得值类型可以存储在垃圾回收堆中,而拆箱是从对象中提取值类型。
相对于简单的赋值而言,装箱和拆箱过程需要进行大量的计算,对值类型进行装箱时,必须分配并构造一个全新的对象,而拆箱过程的强制转换也需要进行大量的计算,因此装箱和拆箱会对程序的执行性能有影响。
int i = 99;
object o = (object )i;//装箱
Console.WriteLine(o);
Console.WriteLine(o.GetType());
// Console.WriteLine (o.GetHashCode());哈希运算一个数学方程式,
//它可用文本(如电子邮件信息)来生成称为信息摘要的代码。
//著名的哈希函数如:MD4,MD5,SHS。 用于数字鉴别的哈希函数必须有特定的属性,
//使它在密码使用方面有足够的安全性。
o = 123;
i = (int)o;//拆箱
Console.WriteLine(i);
Console.WriteLine(i.GetType ());
Console.ReadKey();
Sbyte 八位有符号整数
Byte 八位无符号整数
??操作符
int ? x = null;
//y=x,如果x=null,y=-1
int y = x ??-1;
Console.WriteLine("y是{0}",y);
New运算符
New 运算符用于创建一个新的类型实例,它有以下3种形式:
1)对象创建表达式,用于创建一个类类型或值类型的实例。
2)数组创建表达式,用于创建一个数组类型的实例。
3)代表创建表达式,用于创建一个代表类型的实例。
Typeof运算符
Typeof运算符用于获得系统原型对象的类型,即type对象。Type类型包含关于值类型和引用类型的信息,Typeof运算符可以在C#语言中的各种位置使用,以找出关于引用类型和值类型的信息。
Type myType = typeof (int );
Console.WriteLine(myType );
占位符
在Console.WriteLine("")中,第一个变量或字符串可以使用占位符。
占位符由{数字}组成,数字由0开始编号
第1个占位符:{0}
第2个占位符:{1}
第3个占位符:{2}
......
0取第一个变量,1取第二个变量,占位符可以重复使用。
Console .WriteLine ("我叫{0},今年岁了,我的工资是{2}元",name,age,salary );
占位符
Console .WriteLine()有多个参数时,输出都是第一个参数中的内容,从第二个参数开始时,都是用来替换第一个参数中的占位符的值,所以从第二个参数开始,要不要输出,就要看第一个参数有没有相关的占位符。(?)
字符串类型
Console.ReadLine( );
用于让用户从键盘上输入一句话,当程序执行到上面的一句话,就会暂停,然后等待用户从键盘上输入一句话,按回车程序将继续执行。如果想得到用户输入的内容,就需要定义一个string类型的变量,写在上面一句话的前面,接收用户输入的内容。接收用户输入的内容,必须定义一个字符串来接收。
string input = Console.ReadLine( );
字符串的转义
转义字符:什么时候用转义字符?
当我们需要字符串中输入一些特殊字符时,比如半角引号、换行、退格。
转义字符是一个字符,它由一个\和一个字母来组成,并且有特殊意义的一个字符。常用转义字符有:
\n 换行
\b baskspace 退格
\t tab键,由多个空格组成的字符,具有行与行之间的对齐功能。
\\ 表示一个扛
\"表示一个"
在字符前面加一个@有两种意义:
⑴字符串中如果有\,则不再理解为转义符;
(2)使字符串可以换行
如果在字符串前面加了@符号,在字符串中用两个双引号代表一个引号。
算数运算符及算数表达式
算数运算符:+ - * / %(取余或取模)
算数表达式:由算数运算符连接起来的式子。
C#中,有5个运算符,+ - * / %它们均是二元运算符,要求参与的两个操作数的类型必须相同,并且经过运算的结果也与操作的类型相同。
优先级:先乘除,后加减,有括号先运算括号内的,先算里层的括号,再算外层的括号,相同级别从左至右运算,小括号可以无限制使用,注意的是,一定要成对出现。
类型自动转换规则:
参与运算(算数运算和赋值运算)的操作数和结果类型必须一致,当不一致时,满足下面条件时,系统会自动完成类型转换。
1)两种类型兼容;比如int类型和double 类型
2)目标类型大于源类型;比如double >int ,小的转向大的,且数据不丢失。
3)对于表达式
如果一个操作数为double类型,则整个表达式将提升为double类型。
在自动转换过程中,是不丢失精度的,经常遇到的是,参与运算的两个操作数,一个是int类型,一个是double类型,那么int 类型将自动转换为double类型。
如果精度丢失,则自动转换不会进行。
强制类型转换:
语法:
(数据类型名)待转换的值
强制类型转换,数据一定要相互兼容。
字符串说法通过强制类型转换成数字类型,因为强制转换要求待转换的类型和目标类型必须都为数字。
string age = Console.ReadLine();
int age1= Convert.ToInt32 (age);
Convert 不再是内存级别的转换,而是考虑数据含义的转换。Convert是一个加工、改造的过程。
一切类型都可以转换为String 类型。
Try-catch
Try
{
有可能出现错误的代码在在这里
}
Catch
{
出错后的处理
}
如果try中的代码没有出错,则程序正常运行try中的内容,不会执行catch中的内容。
如果try中的代码一旦出现错误,程序立即停止,跳入catch部分进行执行。
自加自减
一元表达式
++ 有前加和后加
-- 有前减和后减
Int age = 18
Int sum = age++ - 10
上面代码在进行运算时,age++取age原值进行运算,所以sum= 8;
就相当于
Int age = 18
Int sum = age - 10
Age = age +1
Int age = 18;
Int sum = ++age -10 ;
在运算时,++age取age加一后的新值参与运算,故sum= 9;
就相当于
Int age = 18;
Age = age + 1;
Int sum = age -10;
总之,不管是++age,还是age++,age的值都进行了加一运算。
在c#中,一元运算符的优先级比二元运算符的优先级高。
复合运算符
+= age +=3 就等价于age = age +3,理解为在age的原值上直接加3
-=
*=
/=
%=
C#中,能改变变量中的值有:
=、++、--、+=、-=、*=、/=、%=
关系运算符(比较运算)
> < == != >= <=
在C#中,6个关系运算符,用于比较两个事物之间的关系。
关系表达式的运算结果为bool类型,BOOL类型只有两个值,一个是True一个是Flase,如果关系表达式成立,则这个表达式的值为True,否则为False。
逻辑运算符(&& || !)
1)逻辑与运算符(&&)
表达式1 |
表达式2 |
逻辑与结果 |
True |
True |
True |
Flase |
True |
Flase |
True |
Flase |
Flase |
Flase |
Flase |
Flase |
逻辑与(&&)连接的两个表达式要能求解成BOOL类型,一般情况下都是关系表达式,整个逻辑与运算结果也是BOOL类型
BOOL isRight = 表达式1 &&表达式2
先进行关系运算,再进行与运算。
2)逻辑或运算(||)
只要有一个为True,其运算结果就为True
3)逻辑非(!)(取反) 这是一个一元运算
用法:
!(布尔类型的表达式即关系表达式)
作用,真变假,假变真
&&逻辑与 第一个条件为false时,第2个表达式不执行
||逻辑或 第一个条件为true时,第2个表达式不执行
优先级:
If 结构
If(条件) 条件时关系表达式或逻辑表达式
{
语句1;
}
执行过程:
首先判断条件的结果,如果条件为true,则执行语句1,如果条件为False,则跳过语句1,执行后面的语句。
注意:
1)if后面括号中的条件要能计算为一个bool类型;
2)默认情况下,if语句只能带一句话,即和if语句有关的语句只有语句1。
If - else 结构
语法
If(条件)
{
语句块1;
}
Else
{
语句块2;
}
如果大括号去掉,则只带一句话。
执行过程:
如果条件为true,则执行语句块1,并且跳过else所带的语句块2 ;
如果条件为False,则跳过if所带的语句块1,执行else带的语句块2 。
上面两个语句块,根据条件结果为true或false,总有一个语句块被执行。
If - elseif -else
语法
If(条件1)
{
语句块1;
}
elseIf(条件2)
{
语句块2;
}
elseIf(条件3)
{
语句块3;
}
。。。。。。
Else
{
语句块;
}
在if-elseif结构中只有当上一条件不成立时,才会进入下一个elseif 语句,并进行后面的条件判断,一旦elseif后面的条件为true,则执行elseif所带的语句块,执行完成后,程序跳出if-elseif结构,如果所有的if都不成立,如果有else,则执行else后面所带的语句,否则什么都不执行。
Else 永远和最近的if语句配对。
Ctrl+K+F 自动排版功能。
Switch-case语句
语法:
Switch(表达式)其结果是一个值
{
Case 值1 :
语句块1:
Break;
Case 值2 :
语句块2:
Break;
Case 值3 :
语句块3:
Break;
。。。。。。
Default :
语句块3;
Break;
}
执行过程:
首先计算表达式,然后根据计算的结果,去匹配case后面的值,如果有匹配项,则执行匹配项后面的语句,知道该语句后面的break语句,跳出switch-case语句,如果与所有的case后面的值都不匹配,如果有default,则执行default,则执行default后面的语句,如果没有default语句,则跳出switch-case,什么都不执行。
注意:
直接搜索匹配项,与default位置无关,只有和匹配项有关,只有当没有匹配项的时候,才执行default后面的语句。
但多种类型输出的结果相同时,可以合写。
If - elseif -else和 Switch-case语句
相同点:
都可以实现多分支结构:
不同点:
Switch-case语句一般情况下只能用于等值比较
If - elseif -else语句可以处理范围
目前,我们学习的程序结构有3种:
顺序结构
分支结构
循环结构
While循环的语法
While(循环条件)结果是bool类型,是true或是false
{
循环体;及要循环执行的N条语句
}
执行过程:
1)先判断循环条件,如果条件为True,则转向2),如果条件为false,则转向3);
2)执行循环体,循环体执行结束后,转向1);
3)跳出循环,循环结束。
注意:
在循环体中一定要有改变循环条件中的每个变量的值得语句,使循环条件终有一天为False。
N此循环,如果i从0开始,则循环条件为i<n
特点:是先判断,后执行。
Do -while 循环
语法:
Do
{
循环体;
}
While(条件);
执行过程:
1)先执行循环体,执行完循环体,转向2);
2)判断条件是否成立,如果条件为True,转向1),如果条件为False,则转向3)
3)跳出循环。
加入循环条件开始就不成立,对于while循环,一次都不会执行循环体,而对于do-while循环,会执行一次循环体。
Try-catch语句
检测异常
Try
{
有可能出现异常的代码
}
Catch
{
出现异常后的处理
}
如果try语句真的代码没有出现异常,则不会执行Catch中的代码,如果try中的代码出现异常,则程序立即跳到catch中。
如果语句有异常,则不会执行异常语句下面的语句。
程序调试
程序错误一般有两种错误:语法错误和逻辑错误。
3种方法:
1)单步运行
2)观察变量
3)设置断面
F10 F11 单步运行
For 循环
用于已知循环次数:
语法:
For(表达式1;表达式2;表达式3)
{
循环体;
}
执行过程:
1)先计算表达式1,转向2);
2)判断表达式2(即为循环条件),如果表达式2的值为True,转向3),如果表达式2的值为False,转向5);
3)执行循环体,转向4);
4)执行表达式3,转向2);
5)跳出循环,循环结束。
一般情况下,表达式1用于循环变量和对循环变量附初值;
表达式2为循环条件;
表达式3用于改变循环变量的值。
跳转语句
Break语句,用于循环中,退出当前循环。Break一般与if语句配合使用
While
{
........
Break;跳出循环
随后的语句不执行
}
注:
1)用于Switch-case结构中,用于跳出switch。
2)用于循环中,跳出循环,终止循环。
用于循环中,跳出的是break所在的循环。
标志位 flag 定义为bool类型
Continue 语句
While( )
{
Continue;继续进行下一次循环。
}
Continue:
用于循环中,程序一旦执行到continue语句,立即结束本次循环,就是不再执行循环体中下面的语句,直接进行下一次循环。
对于do-while/while循环,直接进行下一次循环条件的判断,如果成立,进入下一次循环。
对于for循环,先执行表达式3,再判断条件是否成立。
三元表达式
表达式1?表达式2:表达式3
执行过程:
首先计算表达式1,应该是一个能够计算成BOOL类型的值,如果BOOL类型的表达式为True,则表达式2的值为整个表达式的值,如果表达式1的值为False,则表达式3的值作为整个表达式的值。
于2012- 03-02早晨
C# 基础(2)的更多相关文章
- java基础集合经典训练题
第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...
- node-webkit 环境搭建与基础demo
首先去github上面下载(地址),具体更具自己的系统,我的是windows,这里只给出windows的做法 下载windows x64版本 下载之后解压,得到以下东西 为了方便,我们直接在这个目录中 ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- Golang, 以17个简短代码片段,切底弄懂 channel 基础
(原创出处为本博客:http://www.cnblogs.com/linguanh/) 前序: 因为打算自己搞个基于Golang的IM服务器,所以复习了下之前一直没怎么使用的协程.管道等高并发编程知识 ...
- [C#] C# 基础回顾 - 匿名方法
C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ...
- HTTPS 互联网世界的安全基础
近一年公司在努力推进全站的 HTTPS 化,作为负责应用系统的我们,在配合这个趋势的过程中,顺便也就想去搞清楚 HTTP 后面的这个 S 到底是个什么含义?有什么作用?带来了哪些影响?毕竟以前也就只是 ...
- Swift与C#的基础语法比较
背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...
- .NetCore MVC中的路由(1)路由配置基础
.NetCore MVC中的路由(1)路由配置基础 0x00 路由在MVC中起到的作用 前段时间一直忙于别的事情,终于搞定了继续学习.NetCore.这次学习的主题是MVC中的路由.路由是所有MVC框 ...
- .NET基础拾遗(5)多线程开发基础
Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...
- .NET 基础 一步步 一幕幕[面向对象之方法、方法的重载、方法的重写、方法的递归]
方法.方法的重载.方法的重写.方法的递归 方法: 将一堆代码进行重用的一种机制. 语法: [访问修饰符] 返回类型 <方法名>(参数列表){ 方法主体: } 返回值类型:如果不需要写返回值 ...
随机推荐
- bootstrap-面包屑和分页
<div class="container"> <div class="row"> <ul class="breadcr ...
- Flash插件地址
Flash插件地址: http://get.adobe.com/cn/flashplayer/存档版本地址: http://helpx.adobe.com/flash-player/kb/archiv ...
- Codeforces Round #229 (Div. 2) C
C. Inna and Candy Boxes time limit per test 1 second memory limit per test 256 megabytes input stand ...
- Android事件分发机制(二)30分钟弄明白Touch事件分发机制
Touch事件分发中只有两个主角:ViewGroup和View.Activity的Touch事件事实上是调用它内部的ViewGroup的Touch事件,可以直接当成ViewGroup处理. View在 ...
- Android 多点触控与简单手势(一)
现在一般的Android手机都会使用电容触摸屏最少可以支持两点触摸,多的可能是七八个,所以基本上都会支持多点触控, android系统中应用程序可以使用多点触控的事件来完成各种手势和场景需求. And ...
- 纸上谈兵:图(graph)
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 图(graph)是一种比较松散的数据结构.它有一些节点(vertice),在某些节 ...
- kindeditor-4.1.7应用
页面: <script type="text/javascript" src="include/kindeditor/kindeditor.js"> ...
- C# 将DataTable存储到DBF文件中
(准备)生成一个DataTable /// <summary> /// 生成一个数据表 /// </summary> /// <returns></retur ...
- 【MySQL】MySQL 5.7+ 版本的初始化
MySQL 5.7.7以上二进制包就不包括原data目录的初始化系统表,官网说明: http://dev.mysql.com/doc/refman/5.7/en/data-directory-init ...
- Android IOS WebRTC 音视频开发总结(七二)-- 看到Google Duo,你想到了什么?
本文主要介绍在线教育这个行业,文章最早发表在我们的微信公众号上,支持原创,详见这里, 欢迎关注微信公众号blackerteam,更多详见www.rtc.help 在昨天的Google I/O大会上Go ...