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

news2024/11/28 10:38:29

目录

一、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;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/866675.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RISC-V在快速发展的处理器生态系统中找到立足点

原文:RISC-V Finds Its Foothold in a Rapidly Evolving Processor Ecosystem 作者:Agam Shah 转载自:https://thenewstack.io/risc-v-finds-its-foothold-in-a-rapidly-evolving-processor-ecosystem/ 以下是正文 But the open source pr…

【用unity实现100个游戏之6】制作一个战旗自走棋类游戏(附源码)

文章目录 前言导入素材开始1. 设置瓦片间隙2. 放置全图瓦片3. 美化瓦片地图4. 添加树木障碍物5. 设定不同的排序图层6. 瓦片交互6. 瓦片交互优化6. 瓦片是否允许角色7. 添加角色8. 新增游戏管理脚本9. 角色移动范围逻辑10. 角色移动范围可视化11. 角色移动12. 重置瓦片颜色12. …

Spark(38):Streaming DataFrame 和 Streaming DataSet 转换

目录 0. 相关文章链接 1. 基本操作 1.1. 弱类型 api 1.2. 强类型 1.3. 直接执行 sql 2. 基于 event-time 的窗口操作 2.1. event-time 窗口理解 2.2. event-time 窗口生成规则 3. 基于 Watermark 处理延迟数据 3.1. 什么是 Watermark 机制 3.2. update 模式下使用 w…

【计算机视觉|生成对抗】条件生成对抗网络(CGAN)

本系列博文为深度学习/计算机视觉论文笔记,转载请注明出处 标题:Conditional Generative Adversarial Nets 链接:[1411.1784] Conditional Generative Adversarial Nets (arxiv.org) 摘要 生成对抗网络(Generative Adversarial…

04_Hudi 集成 Spark、保存数据至Hudi、集成Hive查询、MergeInto 语句

本文来自"黑马程序员"hudi课程 4.第四章 Hudi 集成 Spark 4.1 环境准备 4.1.1 安装MySQL 5.7.31 4.1.2 安装Hive 2.1 4.1.3 安装Zookeeper 3.4.6 4.1.4 安装Kafka 2.4.1 4.2 滴滴运营分析 4.2.1 需求说明 4.2.2 环境准备 4.2.2.1 工具类SparkUtils 4.2.2.2 日期转换…

读《Flask Web开发实战》(狼书)笔记 | 第1、2章

前言 2023-8-11 以前对网站开发萌生了想法,又有些急于求成,在B站照着视频敲了一个基于flask的博客系统。但对于程序的代码难免有些囫囵吞枣,存在许多模糊或不太理解的地方,只会照葫芦画瓢。 而当自己想开发一个什么网站的时&…

限流在不同场景的最佳实践

目录导读 限流在不同场景的最佳实践1. 前言2. 为什么要限流3. 有哪些限流场景3.1 限流场景分类3.2 限流与熔断降级之间的关系3.3 非业务限流3.4 业务限流 4. 有哪些限流算法4.1 计数器限流算法4.2 漏桶限流算法4.3 令牌桶限流算法4.4 滑动时间窗限流算法4.5 限流算法选型 5. 限…

【数据结构与算法】稀疏数组

文章目录 一:为什么会使用稀疏数组1.1 先看一个实际的需求1.2 基本介绍1.2.1 稀疏数组的处理方法1.2.2 数组的举例说明1.2.3 应用实例1.2.4 整体思路分析二维数组转稀疏数组的思路稀疏数组转原始的二维数组的思路 二:代码实现2.1 创建一个原始的11*11二维…

​LeetCode解法汇总1572. 矩阵对角线元素的和

目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 描述: 给你一个正…

探秘金和OA:解析任意文件读取漏洞的潜在威胁

是喜是悲,但可以慰藉的是,你总不枉在这世界上活了一场,有了这样的认识,你就会珍重生活,而不会玩世不恭;同时也会给人自身注入一种强大的内在力量…… 漏洞复现 访问url: 构造payload /C6/Jh…

【网络编程(二)】NIO快速入门

NIO Java NIO 三大核心组件 Buffer(缓冲区):每个客户端连接都会对应一个Buffer,读写数据通过缓冲区读写。Channel(通道):每个channel用于连接Buffer和Selector,通道可以进行双向读…

日常问题——使用Java转将long类型为date类型,日期是1970年

😜作 者:是江迪呀✒️本文关键词:日常BUG、BUG、问题分析☀️每日 一言 :存在错误说明你在进步! 一、问题描述 long类型的日期为:1646718195 装换为date类型: Date date new Dat…

SQL | 使用函数处理数据

8-使用函数处理数据 8.1-函数 SQL可以用函数来处理数据。函数一般是在数据上执行的,为数据的转换和处理提供了方便。 8.1.1 函数带来的问题 每种DBMS都有特定的函数,只有很少一部分函数,是被所有主要的DBMS等同的支持。 虽然所有的类型的…

Linux 基础(五)常用命令-文件属性

文件属性 文件权限文件属性修改文件权限属性 文件所有者 文件权限 文件属性 Linux中文件权限 可以通过文件属性体现; 使用 ll 查看文件列表 最前面的 l d 表示文件类型 1 5 表示硬链接数 或者 子文件夹个数 所属用户 所属用户组 文件大小 创建/更新时间 文件&…

【前端二次开发框架关于关闭eslint】

前端二次开发框架关于关闭eslint 方法一方法二方法三方法四:以下是若想要关闭项目中的部分代码时: 方法一 在vue.config.js里面进行配置: module.exports {lintOnSave:false,//是否开启eslint保存检测 ,它的有效值为 true || false || err…

一个简单实用的线程池及线程池组的实现!

1.线程池简介 线程池,顾名思义,就是一个“池子”里面放有多个线程。为什么要使用线程池呢?当我们编写的代码需要并发异步处理很多任务时候,一般的处理办法是一个任务开启一个线程去处理,处理结束后释放线程。可是这样…

Docker安装 Kibana

目录 前言安装Kibana步骤1:准备1. 安装docker2. 搜索可以使用的镜像。3. 也可从docker hub上搜索镜像。4. 选择合适的redis镜像。 步骤2:拉取 kibana 镜像拉取镜像查看已拉取的镜像 步骤3:创建容器创建容器方式1:快速创建容器 步骤…

vue父页面给iframe子页面传值

在vue父页面有两个个参数 名称和图标,需要把这两个参数传到iframe的地图里面,在地图触发绘点事件的时候,获取到传来的参数并且展示 vue:传值给子页面iframe // 传值给子页面iframe(2个参数)handleIframeLoad() {const iframeWindow this.$re…

海康威视iVMS综合安防系统任意文件上传(0Day)

漏洞描述 攻击者通过请求/svm/api/external/report接口任意上传文件,导致获取服务器webshell权限,同时可远程进行恶意代码执行。 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共秩序,尊重社会公德,不得利用网络从事危害国家安全、荣誉和…

安全第二次

一&#xff0c;iframe <iframe>标签用于在网页里面嵌入其他网页。 1&#xff0c;sandbox属性 如果嵌入的网页是其他网站的页面&#xff0c;因不了解对方会执行什么操作&#xff0c;因此就存在安全风险。为了限制<iframe>的风险&#xff0c;HTML 提供了sandb…