C#学习笔记(1)

本文是C#学习笔记的第一部分,主要介绍了C#语言的基础语法和.NET平台的基本概念。内容涵盖C#语言特色、.NET平台、托管代码与非托管代码、公共语言运行库(CLR)、MSIL以及C#的读入整数、控制台输出、对象类型、值类型与引用类型的区别,以及装箱和拆箱等核心概念。
摘要由CSDN通过智能技术生成

C#学习(1)–基础语法与概念

C#概念以及.NET平台基本介绍

C#语言特色
  • 简洁的语法
  • 完全的面向对象程序设计
  • 与Web紧密结合
  • 充分的安全性与错误处理
  • 灵活性
  • 兼容性
C#编写应用程序
  • 控制台应用程序
  • Windows窗体应用程序
  • ASP.NET Web窗体应用程序
  • ……
.NET 平台概念

在这里插入图片描述

  • 是微软推出的下一代软件开发和服务平台
  • 是一种面向网络,支持各种用户终端的开发环境。
托管代码与非托管代码
  • 托管代码(managed code)是指为.NET Framework编写的代码,在.NET Framework的公共语言运行库(CLR)控制之下运行,类似于JAVA的虚拟机机制。托管代码应用程序可以获得CLR服务,例如自动垃圾回收、类型检查和安全支持等。
  • 非托管代码(unmanaged code)是指不在CLR控制之下运行的代码,如Win32 C/C++ DLL。非托管代码由操作系统直接运行,因此必须提供自己的垃圾回收、类型检查、安全支持等服务。
.NET Framework类库(FCL)

程序员可以十分方便地使用FCL中的类型及其成员,而不必编写大量代码来处理常见的低级编程操作。它是生成.NET Framework应用程序、组件和控件的基础。

FCL由命名空间组成。每个命名空间都包含可在程序中使用的类型,如类、结构、枚举、委托和接口等。

公共语言运行库(CLR)

CLR主要由CLS和CTS两部分组成。
CLR是.NET Framework的核心组件,它在操作系统的顶层,负责管理程序的执行。

(1)公共语言规范(Common Language Specification,简写为CLS)
各种编程语言之间不仅仅是数据类型的不同,语法也有非常大的区别。所以需要定义CLS,它定义了所有编程语言必须遵守的共同标准,包含函数调用方式、参数传递方式、数据类型和异常处理方式等。

(2)通用类型系统(Common Type System,简写为CTS)
CTS定义了一套可以在中间语言中使用的预定义数据类型,所有面向.NET Framework的语言都可以生成最终基于这些类型的编译代码。也就是说,通用类型系统用于解决不同编程语言的数据类型不同的问题,从而实现跨语言功能。
例如,无论VB中的integer类型(VB中的整型)还是C#中的int类型(C#中的整型),编译后都映射为System.Int32。所以CTS实现了不同语言数据类型的最终统一。

微软中间语言MSIL
  • 使用.NET Framework语言编译器把源代码编译成与机器无关的中间语言MSIL
  • 运行Microsoft中间语言(MSIL)之前,必须先根据CLR将其编译为适合目标计算机体系结构的本机代码

该机制使得.NET 平台可以实现跨平台

  • .NET Framework 提供了使用JIT和NGen.exe两种方式来执行此类转换。

在这里插入图片描述

C#项目运行过程

在这里插入图片描述

C#语法

三种方式读入整数

a=int.Parse(Console.ReadLine());

b=int.TryParse(Console.ReadLine(),out a);

c=Convert.ToInt32(Console.ReadLine());

Console.WriteLine的格式化输出

在这里插入图片描述

object类

object是C#中所有类型(包括所有的值类型和引用类型)的基类,C#中的所有类型都直接或间接地从object类中继承而来。因此,对一个object的变量可以赋予任何类型的值。
在装箱拆箱是有用。

string类
  • 注意!当使用@时后面的字符串不会转义
using System;

namespace _1._2
{
   
    class Program
    {
   
        static void Main(string[] args)
        {
   
            string str1 = "123" + "abc";   //"+"运算符用于连接字符串
            char c = "Hello World!"[2];  //"[]"运算符可以访问string中的单个字符,c='e'
            string str2 = "\nChina";
            string str3 = @"\nChina";       // 字符串的另一种表示形式,用@引起来。
            Console.WriteLine(str2);
            Console.WriteLine(str3);
        }
    }
}

值类型变量和引用类型变量的区别

值类型变量生活在栈空间中

值类型变量

C#中的值类型变量和C/C++语言中的普通变量(非指针变量)相似,这类变量直接包含它们的值。所有的值类型均隐式派生自 System.ValueType。
C#中在内存的栈空间中为值类型变量分配空间,而且没有单独的堆分配或垃圾回收开销。因此值类型变量会随着方法调用后栈空间的消亡而自动清除(C#中的值类型变量像C/C++语言中函数内的局部变量,函数执行完后由系统释放其存储空间)。

引用类型变量生存在堆空间中

引用类型变量

引用类型本身存在栈空间中,但是引用类型所指向的实例在堆空间中。
在C#中没有指针,而改为引用,引用表示某个对象的地址而不是变量或对象本身。

栈空间和堆空间

栈空间就是一个数据结构
  • 栈空间是一种先进后出的数据结构。栈空间用于存储如下类型的数据
  • 某些类型变量的值。
  • 程序当前的执行环境。
  • 传递给方法的参数。
堆空间是一块内存空间
  • 在堆空间中可以分配大块的内存以存储某类型的数据对象。
  • 与栈不同,堆里的空间能够以任意顺序存入和移除。

显式和隐式转换

显式类型转换
  • 显式转换又叫强制类型转换,与隐式转换相反,显式转换需
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值