【C# Programming】C#第一课(自己学习的笔记)

目录

一、C# 介绍

1.1 托管代码(Manage Code ) :

1.2 基础类型库 (Base Class Library):

1.3 程序集(Assembly):

1.4 .NET 框架:

1.5 公共中间语言(Common Intermediate Language),简称 IL。

1.6 C#编译器将源代码编译成CIL,从而生成程序集。

1.7 公共语言运行时 (Common Language Runtime ),简称 CLR。

1.8 所有依赖.NET框架的应用程序都需要CLR,CLR 实现如下功能:

1.9 .NET框架:

1.10 .NET FRAMEWORK 4.8:  

二、Hello World

三、基本类型

3.1 整数类型

3.1.1 整数数据

3.1.2 在指定数据类型时使用C#关键字而不是BCL名称。 

3.2 浮点类型

3.2.1 浮点类型 

3.2.2 与浮点数不同,decimal类型保证范围内的所有十进制数都是精确的。例如,0.1M 就是精确值,而不是一个近似值。

3.3 字面量

3.3.1 字面量(Literal value) :源代码中的常量值

 3.3.2 默认情况下,输入带小数点的字面量,编译器会自动把它解释为double 类型,整数值通常默认为int,如果值太大,编译器将把它解释为long,例如:

3.3.3 整数字面量解析

3.4 布尔及字符类型

3.4.1 布尔类型

3.4.2 字符类型

3.4.3 字符类型的字面两是用单引号括起来的,如:’A’

3.4.4 可以使用4位十六进制的Unicode值 、带有强制类型转换的整数值、或十六进制表示他们

3.4.5 字符类型:转义字符

 3.4.6 字符串类型

3.5 字符串字面量

3.5.1 字符串字面量必须放在双引号(“)中, 可以包含Unicode 和转义字符。

3.5.2 在C#中,可以在字符串前使用@符号,指明转义序列不被处理,结果是一个逐字字符串字面量,它不仅能将反斜杠当作普通字符处理, 也能逐字解释所有空白字符。 例如:

3.6 字符串插值

3.6.1 字符串插值使得字符串可以支持嵌入表达式。字符串插值语法在一个字符串字面量前面加上一个$符号前缀,然后将表达式嵌入大括号中, 例如:

3.6.2 字符串字面量也可以在”@”符号前面加上”$”符号的字符串插值而成,例如:

3.6.3 string 类常用静态方法

3.6.4 字符串的不可变性

四、其它介绍

4.1 using 和 using static 指令

4.1.1 using 指令有以下种用途

4.1.2 using static 指令访问类型的静态成员以及嵌套类型而不需要指定类型名。

4.2 隐式类型的局部变量

4.3 值类型和引用类型

4.3.1 C# 中数据类型分为两类 

4.3.2 值类型

4.3.3 引用类型

4.4 null

4.5 显式数据类型转换

4.6 不使用转型操作符的转换


一、C# 介绍

1.1 托管代码(Manage Code ) :

        依赖于.NET 框架,在CLR(Common Language Runtime ) 管理下运行的代码

1.2 基础类型库 (Base Class Library):

        BCL 是公共语言基础标准库Common Language Infrastructure (CLI)之一,它提供了内建的数据类型表示、基本文件访问,自定义属性,格式化、安全属性、 I/O 流、字符串操纵等功能, 例如:System.Int32 , System.String

1.3 程序集(Assembly):

        NET库和可执行文件称为程序集,程序集是编译好的,面向.NETFRAME的代码的逻辑单元。

        程序集中包含的元数据描述了对应代码中定义的类型和方法。程序集也包含描述自身的程序集元数据,这种元数据包含在一个称为“清单”(manifest) 的区域中。

1.4 .NET 框架:

        .NET 所有程序集的集合。

1.5 公共中间语言(Common Intermediate Language),简称 IL。

1.6 C#编译器将源代码编译成CIL,从而生成程序集。

1.7 公共语言运行时 (Common Language Runtime ),简称 CLR。

1.8 所有依赖.NET框架的应用程序都需要CLR,CLR 实现如下功能:

  • CLR 在程序运行时将IL 编译成本地代码。 这个过程称为即时编译( JIT)
  • 带有类型加载器的类型系统,类型加载器负责从程序集中加载类型,类型系统负责验证是否允许使用某些类型
  • 垃圾回收器
  • 线程处理

1.9 .NET框架:

1.10 .NET FRAMEWORK 4.8:  

  • 在目录 %windows%\Microsoft.NET\Framework\v4.0.30319下可以找到框架的库及CLR。
  • 可用于.NET Framework的类组织在System名字空间中。 

二、Hello World

using System;
class Program
{
    static void Main()
    {
        Console.WriteLine("Hello World!");
    }
}

ILDASM

        对程序集执行反汇编,显示C# 编译器生成的CIL代码。

三、基本类型

3.1 整数类型

3.1.1 整数数据

3.1.2 在指定数据类型时使用C#关键字而不是BCL名称。 

3.2 浮点类型

3.2.1 浮点类型 

3.2.2 与浮点数不同,decimal类型保证范围内的所有十进制数都是精确的。例如,0.1M 就是精确值,而不是一个近似值。

3.3 字面量

3.3.1 字面量(Literal value) :源代码中的常量值
 3.3.2 默认情况下,输入带小数点的字面量,编译器会自动把它解释为double 类型,整数值通常默认为int,如果值太大,编译器将把它解释为long,例如:
  • Console.WriteLine(1.618033988749895);     // 1.61803398874989
  • Console.WriteLine(1.618033988749895M);   // 1.618033988749895M
3.3.3 整数字面量解析
  • 没有后缀的字面量按照 int, uint, long, ulong 的顺序,解析成能够存储该值的类型
  • 具有后缀U的数值按照 uint, ulong 的顺序,解析成能够存储该值的类型
  • 具有后缀L的数值按照  long, ulong 的顺序,解析成能够存储该值的类型
  • 如果字面量的后缀是UL 或者LU,则解析成ulong 类型

3.4 布尔及字符类型

3.4.1 布尔类型

3.4.2 字符类型

3.4.3 字符类型的字面两是用单引号括起来的,如:’A’
3.4.4 可以使用4位十六进制的Unicode值 、带有强制类型转换的整数值、或十六进制表示他们

如: ‘\u0041’     (char)65        ‘\x0041’ 

3.4.5 字符类型:转义字符

        转义字符也能表示一个字符类型的字面量

 3.4.6 字符串类型

using System;
Class Program
{
    static void Main()
   {
       string s1 = "A string";
       Console.WriteLine("s1 is" + s1); 
   }
}

3.5 字符串字面量

3.5.1 字符串字面量必须放在双引号(“)中, 可以包含Unicode 和转义字符。

        例如:string filename = “C:\\Prosharp\\Helloworld.cs”;

3.5.2 在C#中,可以在字符串前使用@符号,指明转义序列不被处理,结果是一个逐字字符串字面量,它不仅能将反斜杠当作普通字符处理, 也能逐字解释所有空白字符。 例如:

3.6 字符串插值

3.6.1 字符串插值使得字符串可以支持嵌入表达式。字符串插值语法在一个字符串字面量前面加上一个$符号前缀,然后将表达式嵌入大括号中, 例如:

        Console.WriteLine($"Your  full name is {firstName} {lastName}");

3.6.2 字符串字面量也可以在”@”符号前面加上”$”符号的字符串插值而成,例如:
using  System;
Class Program
{
    static void Main()
   {
       string  s1 = "Hello World!";
       Console.WriteLine($@"The string is: 
        {s1}"); 
   }
}
3.6.3 string 类常用静态方法

3.6.4 字符串的不可变性

        string 类型的关键特性在于它的不可变性(immutable).可以为string 变量赋一个全新的值,但出于性能考虑,没有提供修改字符串内容的机制,例如: 

四、其它介绍

4.1 using 和 using static 指令

4.1.1 using 指令有以下种用途
  • 允许使用命名空间的类型而不需要指定命名空间的名字,例如:using System.text;  
  • 允许创建一个类型或命名空间的别名,例如:using Project = PC.MyCompany.Project;
4.1.2 using static 指令访问类型的静态成员以及嵌套类型而不需要指定类型名。

        例如:using static System.Math;

4.2 隐式类型的局部变量

        var 用来声明隐式类型的局部变量。编译器根据声明时初始化语句推断数据类型

4.3 值类型和引用类型

4.3.1 C# 中数据类型分为两类 
  • 值类型
  • 引用类型
4.3.2 值类型
  • 值类型存储在栈(即堆栈stack)中
  • 除string 外,基本数据类型都是值类型
4.3.3 引用类型
  • 引用类型存储在托管堆中
  • 引用只复制对数据的引用,所以两个不同变量可引用相同的结构,
    • 例如string s1= “hello world”;        
    • string s2 = s1;  
  • 大多数复杂的c#类,包括用户自定义类型,都是引用类型
  • 如果希望用户自定义类型为值类型,需要声明成结构
  • 一般引用类型需要使用new 操作符从堆上分配对象

4.4 null

  • null值由关键字null标识,表明变量不引用任何有效对象,null值只能赋给引用类型,指针类型,可空值类型。 例如:string faxNumber = null;  
  • 一般不能把 null赋给 值类型,因为值类型不能包含引用。但是从C# 2.0开始,允许使用可空修饰符?声明可存储null 的变量, 例如:
    • int ?count = null;        
    •  // ………….        
    • if (count == null)          
    • // …………….

4.5 显式数据类型转换

  • C# 中,可以使用转型操作符执行转型,通过在圆括号中指定希望变量转换成的类型。转换可能丢失精度和数据,例如:
    • long longNumber = 50918309109; 
    • int   intNumber = (int)longNumber;
  • C# 提供了特殊关键字checked/unchecked 标识代码块, 如果代码块中发生数据溢出,checked 将使得程序抛出异常,如:

  • 不存在从数值类型到bool的有效转换

4.6 不使用转型操作符的转换

        每个数据类型都包含一个Parse() 方法,它允许将字符串转换成对应的数值类型,例如:

 string text = "9.11E-31";
 float kgElectronmass = float.Parse(text); 

        System.Convert 也能将一种类型转换为另一种类型,但是它只支持小的数据类型,而且是不可扩展的。它允许从 char, sbyte, short, int, long, ushort, uint, ulong, float, double, decimal, DateTime 和string 类型中的一种转换到另一种类型

string middleText = "261.626";
double middle = System.Convert.ToDouble(middleText);
bool isMiddle = System.Convert.ToBoolean(middle); 

        所有类型都支持ToString 方法 输出一个类型的字符串表示,例如:

bool isMiddle = true;
string text = isMiddle.ToString(); // text = True;

猜你喜欢

转载自blog.csdn.net/weixin_44906102/article/details/132242093