C#基础整理

目录

1.C#基础

1.1.C#概述

1.2.C#的编程功能

1.3.C#与.Net的关系

1.3.1..Net

1.3.2.C#

1.4.C#的集成开发环境(IDE)

1.4.1.Windows上编译C#程序

1.4.2.Linx/Mac OS上编译C#程序

2.C#程序结构

2.1.Hello World

3.C#基本语法

3.1.程序实例

3.2.程序语法分析

3.2.1.using关键字

3.2.2.class关键字

3.2.3.注释

3.2.4.成员变量

3.2.5.实例化一个类

3.2.6.标识符

3.2.7.C#关键字

3.2.8.C#占位符

4.C#数据类型

4.1.值类型(Value types)

4.2.引用类型(Reference types)

4.2.1.对象(Object)类型

4.2.2.动态(Dynamic)类型

4.2.3.字符串(String)类型

4.3.指针类型(Pointer types)

5.C#类型转换

5.1.类型转换方法

5.2.取整方法

6.C#变量

6.1.变量定义和初始化

6.2.接受来自用户的值

6.3.Lvalue和Rvalue

7.C#常量

7.1.整数常量

7.2.浮点常量

7.3.字符常量

7.4.字符串常量

7.5.定义常量

7.6.静态常量和动态常量

7.6.1.静态常量(编译时常量)const

7.6.2.动态常量(运行时常量)readonly

8.C#运算符

8.1.算术运算符

8.2.关系运算符

8.3.逻辑运算符

8.4.位运算符

8.5.赋值运算符

8.6.其他运算符

8.7.运算符的优先级


1.C#基础

1.1.C#概述

C#是一种面向对象的编程语言,由微软开发,由Ecma和ISO核准认可

C#由Anders Hejlsberg和他的团队在.Net框架开发期间开发

C#是专为公共语言基础结构(CLI)设计的

C#的一些特点:

  • 现代的、通用的
  • 面向对象
  • 面向组件
  • 容易学习
  • 结构化语言
  • 产生高效率的程序
  • 可在多种计算机平台编译
  • .Net框架的一部分

1.2.C#的编程功能

C#的构想接近C和C++,但是它与Java非常相似,有许多强大的编程功能

  • 布尔条件(Boolean Conditions)
  • 自动垃圾回收(Automatic Garbage Collection)
  • 标准库(Standard Library)
  • 组件版本(Assembly Versioning)
  • 属性(Properties)和事件(Events)
  • 委托(Delegates)和事件管理(Events Management)
  • 易于使用的泛型(Generics)
  • 索引器(Indexers)
  • 条件编译(Conditional Compilation)
  • 简单的多线程(Multithreading)
  • LINQ 和 Lambda 表达式
  • 集成 Windows

1.3.C#与.Net的关系

1.3.1..Net

.Net是微软公司下的一个开发平台,核心是.Net Framwork,在.Net框架下可以用不同的语言进行开发,语言可以是C#,f#,j#,vb.net等,.Net的跨平台仅限于安卓系统和IOS系统

.Net框架是一个创新平台,能帮你编写出Windows应用程序、Web应用程序、Web服务

.Net框架的设计方式使它适用于多种语言:C#、C++、Visual Basic、Jscript、COBOL等,折现语言可以访问框架或者彼此互相交互,.Net框架由一个巨大的代码库组成,用于C#等客户端语言,下面列出一些.Net框架的组件:

  • 公共语言运行库(Common Language Runtime - CLR)
  • .Net 框架类库(.Net Framework Class Library)
  • 公共语言规范(Common Language Specification)
  • 通用类型系统(Common Type System)
  • 元数据(Metadata)和组件(Assemblies)
  • Windows 窗体(Windows Forms)
  • ASP.Net 和 ASP.Net AJAX
  • ADO.Net
  • Windows 工作流基础(Windows Workflow Foundation - WF)
  • Windows 显示基础(Windows Presentation Foundation)
  • Windows 通信基础(Windows Communication Foundation - WCF)
  • LINQ

1.3.2.C#

C#是.Net框架下的一个程序设计语言,用于创建应用程序的高级语言

1.4.C#的集成开发环境(IDE)

1.4.1.Windows上编译C#程序

微软提供了下列用于C#程序开发的工具:

  • Visual Studio
  • Visual C# Express
  • Visual Web Developer

也可以使用Notepad等文本编辑器编写,并用命令行编辑器编译代码为组件

1.4.2.Linx/Mac OS上编译C#程序

Mono是.Net框架的一个开源版本,可运行于多种操作系统上,比如Linux和Mac OS

2.C#程序结构

2.1.Hello World

C#程序主要包括以下部分

  • 命名空间声明
  • 类Class
  • 类方法
  • 类属性
  • Main方法
  • 语句(Statements)&表达式(Expressions)
  • 注释
using System;
namespace HelloWorldApplication
{
   class HelloWorld
   {
      static void Main(string[] args)
      {
         /* 我的第一个 C# 程序*/
         Console.WriteLine("Hello World");
         Console.ReadKey();
      }
   }
}

第一行  using System;  using关键词用于在程序中包含System命名空间,一个程序一般有多个using语句

第二行是namespace声明,包含一系列的类,这里包含了HelloWorld类

第四行是class声明,这里只有一个Main方法,类一般包含多个方法

第六行定义了Main方法,是所有C#程序的入口点,Main方法说明执行时类将做什么动作

第八行  /*...*/  用于在程序中添加额外的注释,该行将被编译器忽略

第九行  Console.WriteLine("Hello World");  指定了该程序进行的行为

第十行  Console.ReadKey();  针对VS用户,使得程序会等待一个按键动作,防止程序启动时快速运行并关闭

注意以下几点:

  • C#是大小写敏感的
  • 所有语句和表达式以分号结尾
  • 程序的执行从Main方法开始
  • 文件名可以不同于类的名称

3.C#基本语法

3.1.程序实例

C#是一种面向对象的编程语言,在C#中,程序由各种相互交互的对象组成,相同种类的对象通常具有相同的类型

下面以一个矩形类的实现来展示C#的基本语法

using System;
namespace RectangleApplication
{
    class Rectangle
    {
        // 成员变量
        double length;
        double width;
        public void Acceptdetails()
        {
            length = 4.5;    
            width = 3.5;
        }
        public double GetArea()
        {
            /*计算矩形面积*/
            return length * width;
        }
        public void Display()
        {
            Console.WriteLine("Length: {0}", length);
            Console.WriteLine("Width: {0}", width);
            Console.WriteLine("Area: {0}", GetArea());
        }
    }
   
    class ExecuteRectangle
    {
        static void Main(string[] args)
        {
            Rectangle r = new Rectangle();
            r.Acceptdetails();
            r.Display();
            Console.ReadLine();
        }
    }
}

执行结果

Length: 4.5
Width: 3.5
Area: 15.75

3.2.程序语法分析

3.2.1.using关键字

using System;

一般在程序开头添加,用于包含命名空间,这时,部分关键词就可以简写

例如:

 System.Console.WriteLine("Length: {0}", length);

在添加System命名空间后可简写为

Console.WriteLine("Length: {0}", length);

3.2.2.class关键字

class Rectangle
class ExecuteRectangle

用于定义类,在类中可以定义方法

3.2.3.注释

// 成员变量
/*计算矩形面积*/

用于解释代码,编译器会自动忽略注释的条目

3.2.4.成员变量

double length;
double width;

用于存储数据,Rectangle类由两个成员变量,分别为length和width

3.2.5.实例化一个类

Rectangle r = new Rectangle();

在类ExecuteRectangle的Main()方法中,实例化了一个Rectangle类,r即为一个Rectangle类对象

3.2.6.标识符

标识符用来识别类、变量、函数或其他定义的项目

在C#中,类的命名必须遵循如下的基本规则:

  • 标识符必须以字母、下划线或@开头,后面可跟一系列的字母、数字、下划线、@
  • 标识符必须不包含任何嵌入的空格或符号
  • 标识符不能是C#关键字,除非它们有一个@前缀
  • 标识符必须区分大小写
  • 不能与C#的类库名称相同

3.2.7.C#关键字

关键字是C#编译器预定义的保留字,这些关键字不能用作标识符

C#中,有限关键字在代码上下文中有特殊的意义,如get、set,这些被称为上下文关键字

下面给出C#中的保留关键字和上下文关键字

保留关键字:

abstractasbaseboolbreakbyte
casecatchcharcheckedclassconst
continuedecimaldefaultdelegatedodouble
elseenumeventexplicitexternfalse
finallyfixedfloatforforeachgoto
ifimplicitinintinterfaceinternal
islocklongnamespacenewnull
objectoperator outoverrideparamsprivate
protectedpublicreadonlyrefreturnsbyte
sealedshortsizeofstackalloc staticstring
structswitchthisthrowtruetry
typeofuintulonguncheckedunsafeushort
usingvirtualvoidvolatilewhile

上下文关键字:

addaliasascendingdescendingdynamicfrom
getglobalgroupintojoinlet
orderbypartialremoveselectset

3.2.8.C#占位符

当WriteLine()函数有参数时,输出双引号内的内容,后续的参数会替换掉双引号中占位符的内容和占位符,与双引号中的内容一起输出

Console.WriteLine("第一个参数{0},第二个参数{1}",1,2);
Console.ReadLine();
/*第一个参数1,第二个参数2*/

如果双引号内没有留占位符,那么后续参数内容不输出

Console.WriteLine("第一个参数,第二个参数",1,2);
Console.ReadLine();
/*第一个参数,第二个参数*/

占位符内的序号从0开始计算,且占位符必须有可替换的值

Console.WriteLine("第一个参数{1},第二个参数{0}",1,2);
Console.ReadLine();
/*第一个参数2,第二个参数1*/

4.C#数据类型

C#中变量主要分为三种数据类型:

  • 值类型(Value types)
  • 引用类型(Reference types)
  • 指针类型(Pointer types)

4.1.值类型(Value types)

值类型变量可以直接分配给一个值,是从System.ValueType中派生的

下面给出C#可用的值类型

类型描述默认值
bool布尔值False
byte8位无符号整数0
char16位Unicode字符‘\0’
decimal128位精确十进制值0.0M
double64位双精度浮点型0.0D
float32位单精度浮点型0.0F
int32位有符号整数类型0
long64位有符号整数类型0L
sbyte8位有符号整数类型0
short16位有符号整数类型0
uint32位无符号整数类型0
ulong64位无符号整数类型0
ushort16位无符号整数类型0

可以用sizeof()函数获取以字节为单位的对象或类型的存储内存大小

Console.WriteLine("Size of int: {0}", sizeof(int));
Console.ReadLine();
/*Size of int: 4*/

4.2.引用类型(Reference types)

引用类型不包含存储在变量中的实际数据,但是包含对变量的引用

引用类型的变量指向一个内存位置,使用多个变量时,引用类型的变量可以指向一个内存位置,如果内存位置的数据是由一个变量改变的,其他变量会自动反映这个变化,内置的引用类型有:object、dynamic、string

从内存上看,值类型操作是对栈的操作,引用类型操作是对堆得操作,因此值类型的存取速度快,引用类型的存取速度慢

从本质上看,值类型表示的是一个实际数据,而引用类型表示的是一个指向内存地址的一个指针或引用

从来源上看,值类型继承自System.ValueType,引用类型继承自System.Object

4.2.1.对象(Object)类型

对象类型是C#通用系统中所有数据类型的基类,Object是System.Object类的别名,所以对象类型可以被分配任何其他类型的值,但是在分配值之前,需要先进行类型转换

当一个值类型转换为对象类型时,称为装箱,当一个对象类型转换为值类型时,称为拆箱

int val = 1;
object obj = val;      //装箱
int nval = (int) obj;  //拆箱

4.2.2.动态(Dynamic)类型

动态类型可以存储任何类型的值,这些变量的类型检查将会在运行时发生

dynamic <variable_name> = value;

动态类型与对象类型相似,但是对象类型的类型检查是在编译时发生的

4.2.3.字符串(String)类型

字符串类型允许给变量分配任何字符串值,是System.String类的别名,对字符串类型的赋值可以通过双引号或@双引号进行

string str = "www.baidu.com";
string str = @"www.baidu.com";

添加了@的字符串被称为逐字字符串,@字符串会将转义字符当作普通字符对待,在@字符串总可以任意换行,换行符、空格都会计算在字符长度内

string str = "C:\\Windows";
string str = @"C:\Windows";

用户自定的引用类型有:class、interface、delegate

4.3.指针类型(Pointer types)

指针类型变量存储另一种类型的内存地址

C#中的指针功能与C或C++的指针相同

char* cptr
int* iptr

5.C#类型转换

类型转换从根本上来说是把数据从一种类型转换为另一种类型,在C#中一共有两种类型转换形式

  • 隐式类型转换:以C#默认的安全方式进行的转换,不会导致数据丢失,例如从小的整数类型转换为大的整数类型,从派生类转换为基类
  • 显示类型转换:强制类型转换,通过使用预定义的函数显示完成,需要使用强制转换运算符,并且使用强制转换会造成数据丢失
int inum = 100;        //定义了一个整型
long lnum = inum;      //隐式转换为长整型
/*lnum = 100*/
double dnum = 3.14;    //定义了一个双精度浮点数
int inum = (int)dnum;  //显示转换为整型
/*inum = 3*/

5.1.类型转换方法

方法描述
ToBoolan

如果可能的话,把类型转换为布尔型

ToByte把类型转换为字节类型
ToChar如果可能的话,把类型转换为单个Unicode类型
ToDateTime把类型转换为日期-时间结构
ToDecimal

把浮点数或整数类型转换为十进制类型

ToDouble把类型转换为双精度浮点数
ToInt16把类型转换为16位整数类型
ToInt32把类型转换为32位整数类型
ToInt64把类型转换为64位整数类型
ToSbyte把类型转换为有符号字节类型
ToSingle把类型转换为小浮点数类型
ToString把类型转换为字符串类型
ToType把类型转换为指定类型
ToUInt16把类型转换为16位无符号整数类型
ToUInt32把类型转换为32位无符号整数类型
ToUInt64把类型转换为64位无符号整数类型

5.2.取整方法

C#中对double类型的数据取整可直接使用int进行强制转换,也可使用Convert.ToInt32()函数,使用int强制装换时,会直接将小数位数丢掉

double a = 1.35;
double b = 1.65;
int a1 = Convert.ToInt32(a); //a1 = 1
int a2 = (int)(a);           //a2 = 1
int b1 = Convert.ToInt32(b); //b1 = 2
int b2 = (int)(b);           //b2 = 1

6.C#变量

变量提供了一个供程序操作的存储区的名字,在C#中每个变量都有一个特定的类型,类型决定了变量的内存大小和布局,C#中的基本的值类型大致可以分为以下几类:

类型举例
整数类型sbyte、byte、short、ushort、int、uint、long、ulong、char
浮点数float、double
十进制类型decimal
布尔类型true或false值
空类型可为空值的数据类型

6.1.变量定义和初始化

C#中变量定义的语法

<data_type> <variable_list>;

C#中定义变量并变量初始化的语法

<data_type> <variable_name> = value;

正确的初始化变量可以减少很多程序的错误,不对变量进行初始化时会自动赋予默认值

6.2.接受来自用户的值

通过System.Console.ReadLine(),可以用于接受来自用户的输入,并把它存储到一个变量当中

int num;
num = System.Convert.ToInt32(Console.ReadLine());

6.3.Lvalue和Rvalue

C#中的两种表达式

  • Lvalue:可以出现在赋值语句的左边或右边
  • Rvalue:可以出现在赋值语句的右边

变量是Lvalue,可以出现在赋值语句的左边,数值是Rvalue,不能被赋值,只能出现在赋值语句的右边

7.C#常量

常量在程序执行期间不会改变,常量可被视为常规的变量,但它们的值在被定义后不能再修改

7.1.整数常量

整数常量可以是八进制、十进制、十六进制,前缀0x或0X表示十六进制,前缀0表示八进制,没有前缀表示十进制

整数后缀可以是U和L的组合,可以是大写小写,以任意顺序组合,如ul、UL、lu、LU...

7.2.浮点常量

浮点常量由整数部分、小数点、小数部分和指数部分组成

3.14159       /* 合法 */
314159E-5L    /* 合法 */
510E          /* 非法:不完全指数 */
210f          /* 非法:没有小数或指数 */
.e55          /* 非法:缺少整数或小数 */

7.3.字符常量

字符常量是在单引号内,可存储在一个简单字符类型变量的常量,包括普通字符、转义字符、通用字符

7.4.字符串常量

字符串常量包含的字符与字符常量相似,可以是普通字符、转义字符、通用字符

使用字符常量时可以把一个很长的行拆成多个行,可以使用空格分隔各个部分

7.5.定义常量

常量的定义需要用到const关键字

const <data_type> <constant_name> = value;

7.6.静态常量和动态常量

7.6.1.静态常量(编译时常量)const

在编译时确定值,在声明时就进行初始化,且不能再修改,可在类和方法中进行定义

7.6.2.动态常量(运行时常量)readonly

在运行时确定值,在声明时或构造函数中初始化,只能在类中定义

8.C#运算符

8.1.算术运算符

A的值为10,B的值为21

运算符描述实例
+两个操作数相加A+B值为31
-第一个操作数减去第二个操作数A-B值为-11
*两个操作数相乘A*B值为210
/第一个操作数除以第二个操作数B/A值为2
%整除后取余数B%A值为1
++自增运算符,操作数加1A++值为11
--自减运算符,操作数减1A--值为9

自增运算符和自减运算符在操作数左侧时,先对操作数进行自增或自减操作,再对左值进行赋值,在操作数右侧时,先对左值进行赋值,再对操作数进行自增或自减操作 

int a, b;
a = 10;
b = ++ a;       //b的值为11
a = 10;
b = a ++;       //b的值为10
a = 10;
b = -- a;       //b的值为9
a = 10;
b = a --;       //b的值为10

8.2.关系运算符

A的值为10,B的值为21

8.3.逻辑运算符

A为true,B为false

8.4.位运算符

A为10101010,B为11110000

8.5.赋值运算符

运算符描述实例
=将右值赋值给左值C=A,C的值为A的值
+=将右值加左值赋值给左值C+=A,C的值为C+A的值
-=将左值减右值赋值给左值C-=A,C的值为C-A的值
*=将左值乘以右值赋值给左值C*=A,C的值为C*A的值
/=将左值除以右值赋值给左值C/=A,C的值为C/A的值
%=将左值对于右值取模后赋值给左值C%=A,C的值为C%A的值
<<=将左值左移并重新赋值C<<=2,等同于C=C<<2
>>=将左值右移并重新赋值C>>=2,等同于C=C>>2
&=将左值按位与并重新赋值C&=2,等同于C=C&2
^=将左值按位异或并重新赋值C^=2,等同于C=C^2
|=将左值按位或并重新赋值C|=2,等同于C=C|2

8.6.其他运算符

C#中还包括一些其他运算符

运算符描述实例
sizeof()返回数据的大小sizeof(int)返回4
typeof()返回class的类型typeof(X);
&返回变量的地址&a返回a的地址
*变量的指针*a将指向变量
?X:Y条件表达式条件为真返回X,条件为假返回Y
is判断对象是否为某一类型

if(X is Y)

as强制转换,失败也不抛出异常class1 cls1 = cls2 as class1

8.7.运算符的优先级

C#中运算符也存在优先级的判断,下表将运算符的优先级按从上到下的顺序列出

优先级运算符结合性
后缀() [] -> ++ --从左到右
一元运算! ~ ++ --从右到左
乘除* / %从左到右
加减+ -从左到右
移位<< >>从左到右
关系< <= > >=从左到右
相等== !=从左到右
位与&从左到右
位异或^从左到右
位或|从左到右
逻辑与&&从左到右
逻辑或||从左到右
条件?:从右到左
赋值= += -=...从右到左
逗号从左到右

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值