学习笔记(C#基础书籍)-- C#基础篇
(12.24)
C#介绍:《第一章》
特点:语法简洁,面向对象,支持绝大部分的web标准,强大的安全机制(垃圾回收器),兼容性好(遵循.NET的公共语言规范【CLS】,从而能跟其他语言开发组件兼容),完善的异常处理机制。
C#与.Net相辅相成:.Net Framework有两个主要组件:公共语言运行时(CLR),和类库。
C#项目入门:《第二章》
using[需导入的命名空间] + namespace[自己的命名空间] + class[类] + main方法[程序的主入口方法]
主入口方法main中,通常不写具体逻辑代码,只用作类实例化和方法调用。
Console类表示控制台应用程序的标准输入流,输出流和错误流。Read/ReadLine方法控制台读入,分别为int/string 类型。
Write/WriteLine方法来向控制台输出,分别为输入后不换行/输出后换行。
命名规范:
用有意义的名字定义命名空间:例如:公司名产品名。
接口的名称加前缀‘I’
类名最好能体现类的功能
方法名一般为动宾短语
定义成员变量时,最好加前缀‘_’。
C#基础语法:《第三章》
整数类型:
有符号:sbyte(8)(-128~127),short(16),int(32),long(64)
无符号:byte(8),ushort(16),uint(32),ulong(64)
浮点类型:
float(7),double(15~16)
需要使用float类型变量时,必须在数值的后面跟随f或者F
字符类型:
char类
变量:
静态变量static ,有效范围可以跨类,甚至可以达到整个应用程序内,直接以 [类名.静态变量] 的方式在其他类中使用。
常量:
const静态常量,常量的值必须在声明时就进行初始化。
readonly常量进行动态赋值,动态常量,只能在构造函数中进行赋值,在运行时确认数值
运算符
逻辑运算符:与(&&,&),或(||,|),非(!)
位运算符:位与(&)【同为1则结果为1】,位或(|)【同为0则结果为0】,位异或(^)【二进制表示相同为0,否则为1】,取反(~)【】
移位运算符:左移位(<<),右移位(>>)
数据类型转换
使用convert类进行转换,可进行显式类型转换
C#流程控制语句《第四章》
if,if…else if…else
switch语句:switch(判断参数){ case 常量值1:语句块1 break; … defaul:语句块n+1 break; }
while ,do…while
for循环以及变体
跳转语句:用于提前结束循环。break;(循环结束) 和 continue;(结束本次循环)
C#数组《第五章》
一维数组:创建:先声明,再用new关键字进行内存分配;初始化;使用;
二维数组:创建:先声明,再用new关键字进行内存分配;初始化;使用;
数组与Array类:可以使用Array类中的各种属性或者方法对数组进行各种操作
数组的基本操作:
1.使用foreach遍历数组:foreach(【类型】【迭代变量名】in 【集合】){ 语句 }
2.对数组进行排序:
sort方法:只能对一维数组进行排序:Array.Sort(arr);
reverse方法:用于反转一维Array中元素的顺序
C#字符串《第六章》
提取字符串信息:
1.获取长度:Length属性,
2.获取指定位置的字符:直接用下标即可
3.获取子字符串索引位置:indexOf,返回搜索的字符串首次出现的索引位置;lastIndexOf,返回搜索的字符串最后一次出现的索引的位置
4.判断字符串首尾内容:startWith,endWith(返回true or false)
字符串操作:
1.拼接: 使用 ”+“ 运算符
2.比较字符串:Equals
3.大小写转换ToUpper,ToLower
4.格式化字符串:
string类提供了一个静态的Format方法,用于将字符串数据格式化指定的格式,包括货币,指数,定点,number,百分比,十六进制
Format也可以根据日期时间按照某种标准格式输出,DataTime类型格式
5.截取字符串: .Substring (int startIndex,int length)
6.分割字符串:.Split(char[] separator)
7.去除空白内容:.Trim()
8.替换字符串:.Replace(char Ochar,char Nchar) ==> newstr = strold.Replace ( ‘,’ , ‘*’ );
可变字符串类:StringBuilder类,由于使用‘+’会产生一个新的string对象,会在内存中创建新的字符串对象。而提供可变的字符序列StringBuilder类,大大提高了频繁增加字符串的效率,降低系统开销。
程序中定义:创建一个StringBuilder对象,用new进行实例化
类使用:
1…Append(“string"):将文本或字符串追加到指定对象的末尾
2…AppendFormat(“{0:C0}”,Num):自定义变量的格式并将值追加到stringBuilder对象的末尾
3…insert(0,“软件:”):将字符串添加到当前StringBuilder对象中的指定位置
4…Remove(int startIndex,int lenth):移除指定数量的字符
5…Replace(stringold,stringnew):用另一个指定的字符来替换StringBuilder对象内的字符
StringBuilder和string的区别:string本身是不可改变的,只能赋值一次,每一次内容发生改变,都会生成一个新的对象,然后原有的对象引用新对象。而StringBuilder每次操作都是对自身对象进行操作,而不是生成新对象,其所占空间会随着内容的增加而扩充。
C#面向对象程序设计《第七章》
由面向过程发展而来,他将数据和对数据的操作看作是一个不可分割的整体,将现实问题简单化。
面向对象的描述:OO,设计思想。
1.对象:随处可见的一种事务就是对象,对象是事务存在的实体,对象可表示为:属性+行为。类实际上就是封装对象属性和行为的载体,而对象则是类抽象出来的一个实例。
2.类:就是同一类事务的统称。类是世间事物的抽象称呼,而对象则是整个事务相对应的实体。面临实际问题,通常需要实例化对象来解决。类是封装对象的属性和行为的载体。
3.三大基本特征:封装继承多态。
=》类:
声明:class
字段:常见的常量或者变量
属性:对现实实体特征的抽象,提供对类或对象的访问
private string tradecode;
public string TradeCode
{get{return tradecode;} //get,set可以是其他的语句set{tradecode = value;}
}
构造函数:
默认构造函数和有参构造函数
静态构造函数:在C#中可以为类定义静态构造函数,这种构造函数只执行一次。主要原因:类有一些静态字段或者属性,需要在第一次使用类之前,从外部源中初始化这些静态字段和属性
析构函数:自动调用,不需要显示调用
方法:方法用来定义可执行的操作,方法是和类相关联的动作
方法的参数:
1.值参数:形参和实参按值传递,对形参的修改并不会影响实参。
2.ref参数:使形参按引用传递(即使形参是值类型),在方法中对形参所做的任何更改都将反应在实参中,使用时方法声明和方法调用都必须显示使用ref关键字
3.out参数:用来定义输出参数,它会导致参数通过引用来传递,跟ref差别在于,ref要求变量必须在传递之前进行赋值,而out不赋值即可使用,同样方法声明和方法调用都必须显示使用out关键字
4.params参数:如果有多个相同类型的参数,params是一个一维数组,主要用来指定在参数数目可变时所采用的方法参数
(整体举例在P171)
方法的重载:不能仅仅根据返回值类型不同进行区分,不能仅根据参数是否声明为ref,out或者params来区分。
类的静态成员:
不同的类之间需要对同一个变量进行操作,比如一个水池,同时打开进水口和出水口,水池中的水量可认为是一个共享的变量,把共享的变量或者方法用static修饰,就被成为静态变量和静态方法(静态成员),静态成员是属于类所有的,在调用时,不用创建类的对象,直接使用类名调用。
对象的创建及使用:
对象的产生,操作,和销毁。
创建:用new关键字调用构造函数创建对象。
C#中提供了this关键字,表示本类的一个对象,在局部变量或方法参数覆盖了成员变量时,可以使用this关键字明确引用的是类成员还是方法的形参。另外还可以作为方法的返回值,用来返回本类的对象。
销毁:C#有一套完整的垃圾回收机制。何种对象会被.net垃圾回收器视为垃圾?
主要包括:对象引用超过其作用范围,将对象赋值为null。
类与对象的关系:类是具有相同或相似结构,操作和约束规则的对象组成的集合,而对象是某一类的具体化实例
=》继承:
C#中只支持单继承,而不支持多继承;子类的可访问性一定要低于或者等于父类的可访问性。
base关键字:想在子类的方法中实现父类原有的方法,base代表父类对象,(对比this关键字代表本类对象)
使用方法:base.property; //调用父类的属性 base.method(); //调用父类的方法
另外base关键字还可以指定创建派生类实例时应调用的基类构造函数
//例如基类Goods定义一个构造函数,用来定义的属性赋初值
public Goods(string tradecode,string fullname)
{......
}
//派生类JHInfo中定义构造函数时,即可使用base关键字调用基类的构造函数,代码如下
public JHInfo(string jhid,string tradecode,string fullname) : base(tradecode,fullname)
{......
}
需注意,访问父类成员只能在构造函数,实例方法或者实例属性中进行,因此从静态方法中使用base关键字是错误的。
派生类的构造函数会根据层次结构找到最顶层的基类,并调用基类的构造函数,然后再一次调用各级派生类的构造函数。析构函数的执行顺序与构造函数的相反。
=》多态:
C#中类的多态性是通过在派生类中重写基类的虚方法来实现的
1.虚方法的重写:
除开构造函数外,方法在默认情况下可以显示地声明为virtual,为虚方法。定义为虚方法之后,可以在派生类中重写虚方法,重写虚方法使用override关键字。在调用方法时,可以调用对象类型的合适方法。
2.抽象类与抽象方法:
如果一个类不与具体的事物联系,而只是表达一种抽象的概念或者行为,仅仅是作为其派生类的一个基类,那就是抽象类(“去商场买衣服”),(用abstract关键字)。【访问修饰符 abstract class 类名 : 基类或接口{ //类成员 }】
跟非抽象类的区别:a.抽象类不能直接实例化,b.抽象类可以包含抽象成员,而非抽象类中不可以,c.抽象类不能被密封
类中只要有一个方法声明为抽象方法,这个类也必须被声明为抽象类
当从抽象类派生一个非抽象类时,需要在非抽象类中重写抽象方法,(override关键字)
3.接口的使用:
由于类不支持多重继承,但出现多重继承的情况又比较多,C#提出了接口的概念,通过接口可以实现多重继承的功能,接口是一种标准,强制性要求派生类必须实现接口约定的规范(interface关键字)
接口特征:a.类似于抽象基类:继承接口的任何类型都必须实现接口的所有成员;b.接口中不能包括构造函数,因此不能直接实例化接口;c.接口访问永远是公共的;d.接口中的成员不能声明为虚拟或者静态。
接口定义时,可提供set,get访问器;实现接口成员时,必须添加public修饰符,不能省略。
接口可以多继承:
interface ITest1{}
interface ITest2{}
interface ITest3{}
class Test : ITest1,ITest2,ITest2 //继承3个接口,接口之间用逗号分隔
{}
ref和params参数使用注意要点:
ref:必须用ref修饰实参,ref参数在调用之前一定要进行赋值
params:只能在一维数组上使用,不允许使用ref或者out修饰params,一个方法最多只能有一个params参数。
抽象类与接口的区别:
a.抽象类可以有非抽象方法,接口所有的方法都是抽象方法;b.抽象类属性中可以有非静态常量,接口的所有属性都是静态常量;c.抽象类有构造函数,接口没有构造函数。d.抽象类一个类只能继承一个父类,接口一个类可以同时实现多个接口。
C#异常处理《第十一章》
是System.Exception的直接或间接子类
try…catch语句
try{//被监控的代码
}
catch(Exception ex) //也可以检测抛出多个异常,顺序先子类后父类
{//异常处理
}
......//可选添加后续finally代码
finally
{ //程序代码
}
throw语句
throw new XXXXXException();
//后也可使用catch进行捕获
相关文章:
学习笔记(C#基础书籍)-- C#基础篇
(12.24) C#介绍:《第一章》 特点:语法简洁,面向对象,支持绝大部分的web标准,强大的安全机制(垃圾回收器),兼容性好(遵循.NET的公共语言规范【CL…...

操作系统(26)数据一致性控制
前言 操作系统数据一致性控制是确保在计算机系统中,数据在不同的操作和处理过程中始终保持正确和完整的一种机制。 一、数据一致性的重要性 在当今数字化的时代,操作系统作为计算机系统的核心,负责管理和协调各种资源,以确保计算机…...
ubuntu24.04使用opencv4
ubuntu24.04LTS自带opencv4.5代码实例 //opencv_example.cpp #include <opencv2/opencv.hpp> #include <iostream>int main() {// 读取图像cv::Mat img cv::imread("image.jpg", cv::IMREAD_COLOR);if (img.empty()) {std::cerr << "无法读…...

【项目构建】Gradle入门
本文适用: 不知道什么是项目构建,可以了解下Ant,Maven,Gradle的区别。知道什么是项目构建,了解Ant,Maven,可以看到Gradle是怎么做的。知道什么是项目构建,了解Ant,Maven&…...
Electron -- Electron应用主要核心(二)
Electron 应用主要由以下几个核心组成部分构成: 主进程(Main Process): Electron 应用的入口点是主进程,通常是 main.js 文件。它负责管理应用的生命周期,包括创建窗口、处理系统事件和应用更新等。主进程可…...

【前端开发】HTML+CSS+JavaScript前端三剑客的基础知识体系了解
前言 🌟🌟本期讲解关于HTMLCSSJavaScript的基础知识,小编带领大家简单过一遍~~~ 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 🔥 你的点赞就是小编不断更新的最大动力 …...

git命令恢复/还原某个文件、删除远程仓库中的文件
有时刚创建的远程仓库,可能无意中把一些没用的文件上传到仓库,本文介绍一下怎么删除这些文件。 一、git命令恢复某个文件 第一步:拉取最新代码 git pull 第二步: 查看git 修改的文件状态 git status 第三步:查看…...

二十一、Ingress 进阶实践
架构参考 使用hostnetwork,推荐的方式,使用单独的物理服务器,不部署业务pod的主机。 一、Ingress Nginx Controller 安装 采用helm的安装方式,进行部署。 官网地址: https://kubernetes.github.io/ingress-nginx/deploy/ github地址: https://github.com/kubernetes/in…...
ES学习Promise对象(九)
这里写目录标题 一、概念二、示例基本使用使用 Promise 对象封装Ajaxthen() 方法catch() 方法 一、概念 简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。Promise 是一个对象,Promise 提供统一…...

寻找适合小户型的开源知识库open source knowledge base之路
寻找一个开源的知识库,为了把以前花很多时间收集的信息或是项目/课程资料放到一个容易归类和管理的私有自主系统中,以便更容易查阅,花更少时间收集、对比版本及分享等一系列管理工作,同时确保在需要时可以相对快速找到有用的资料&…...

Linux高级--2.6 网络面试问题
tcp 与 udp的区别 1.tcp 是基于连接的 UDP是基于数据包 2.处理并发的方式不通 a.tcp用epoll进行监听的 b. udp是模拟tcp的连接过程,服务端开放一个IP端口,收到连接后,服务端用另一个IP和端口发包给客户端。 3.tcp根据协议MTU黏包及…...
在 CentOS 7 上安装 Node.js 20 并升级 GCC、make 和 glibc
在 CentOS 7 上安装 Node.js 20 并升级 GCC、make 和 glibc 📖 前言 在 CentOS 7 上使用 NVM 安装 Node.js 后,可能会遇到如下问题: node: /lib64/libm.so.6: version GLIBC_2.27’ not found (required by node) node: /lib64/libc.so.6:…...

音视频入门基础:MPEG2-TS专题(20)——ES流简介
《T-REC-H.222.0-202106-S!!PDF-E.pdf》第27页对ES进行了定义。ES流是PES packets(PES包)中编码的视频、编码的音频或其他编码的比特流。一个ES流(elementary stream)在具有且只有一个stream_id的PES packets序列中携带࿱…...

五子棋小游戏设计(Matlab)
基于Matlab的五子棋小游戏设计 (完整源码运行呈现的GUI界面) (完整的设计说明报告) 需要请随时联系博主,博主基本都在线,能秒回! 随着计算机技术的发展,将传统棋类游戏与编程技术…...
基于Pycharm与数据库的新闻管理系统(3)MongoDB
pip3 install pymongo 1.连接到MongoDB数据库 文件地址:db/mongo_db.py 从 pymongo 模块中导入 MongoClient 类;创建 MongoClient 的一个实例,该实例尝试使用提供的MongoDB连接字符串连接到MongoDB服务器。 from pymongo import MongoClie…...
WebRtc webrtc-streamer部署
文章目录 本文档只是为了留档方便以后工作运维,或者给同事分享文档内容比较简陋命令也不是特别全,不适合小白观看,如有不懂可以私信,上班期间都是在得 WebRtc webrtc-streamer 部署 docker run -p 8000:8000 -it mpromonet/webrt…...

CVPR-2024 | 具身导航模型大一统!NaviLLM:学习迈向具身导航的通用模型
作者:Duo Zheng, Shijia Huang, Lin Zhao, Yiwu Zhong, Liwei Wang 单位:香港中文大学,上海人工智能实验室,感知与交互智能中心 论文链接:Towards Learning a Generalist Model for Embodied Navigation(…...

CAN201 Introduction to Networking(计算机网络)Pt.2 传输层
文章目录 3. Transport Layer(传输层)3.1 Multiplexing and demultiplexing(多路复用和多路分解)3.2 Connectionless transport:UDP3.3 Principles of reliable data transfer3.4 Pipelined communication3.5 TCP: con…...

git仓库多人协作新建分支 合并到主分支流程详解
在多人协作的 Git 仓库中,新建分支并最终将其合并到主分支的流程是为了实现团队协作、提高代码的可管理性、确保代码质量,并且避免多人同时修改同一部分代码导致冲突。以下是这个流程的目的和具体步骤。 目录 1. 在 master 上新建一个分支 2. 进行功能…...

Visual Studio 使用 GitHub Copilot 与 IntelliCode 辅助编码 【AI辅助开发系列】
🎀🎀🎀【AI辅助编程系列】🎀🎀🎀 Visual Studio 使用 GitHub Copilot 与 IntelliCode 辅助编码Visual Studio 安装和管理 GitHub CopilotVisual Studio 使用 GitHub Copilot 扩展Visual Studio 使用 GitHu…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...

微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...

YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...