C# 2中的一些小特性

一、局部类型

        在C#当中有这样一个关键字partial 用来声明类,结构,接口分为多个部分来声明。使用场景可以一部分类中写实例方法,一部分写属性,我在实际工作测试中就是将属性与实际方法是分开的。相互之间的成员互相通用。

举个例子:

public partial class S
{public int MyProperty { get; set; }
}
public partial class S
{public void Console(){}
}

示例解释:

        定义了一个局部类型(这里是定义的部分类)其中当前的S这个类中具有一个属性一个方法 

局部方法

        和上述定义的局部类一样,可以定义局部方法,局部方法可以分多个部分一部分只具有方法名称不建议实际方法体,另一部分可以选择是否实现,如果没有实现如果有调用当前没有方法体的局部方法,那么编译器会自动删除当前所有调用的引用不影响程序性能。

举个例子:

public partial class S
{public partial void O( );}
public partial class S
{public partial void O( ){}
}

示例解释:当前定义两个部分方法其中部分方法体在下面的这个部分类中。

二、静态类

         静态类在我们开发实例当中我们经常把静态类用为一个工具类是最常见的一个用法。静态类中不能有实例成员如不能有非静态的属性非静态的方法也不能具有实例构造函数 

举个例子:

public static class DBHelper
{public static DataTable Find(string sql)//查询{throw new NotImplementedException();}
}

示例解释: 定义了一个数据库帮助类(没有实现具体逻辑)

三、属性的访问分离

        用途只想在当前类内部对属性进行访问get块以及set块不想外部访问get块或者set块,保护属性的可访问性权限

举个例子(只读外部无法访问私有的Set块):

public class DBHelper
{private int myVar;public int MyProperty{get { return myVar; }private set { myVar = value; }}
}

提示:可以将Set或Get设置为受保护的、内部的、受保护的内部的、私有的(protected 、internal、protected internal、private ) 

四、命名空间别名

见文章:高级C#技术(一)-CSDN博客

五、编译指令

        我们在编译C#代码的时候我们通常会收到编译器的警告。通常这种警告提示是类似:声明了某个变量,但没有使用到当前变量会警告、没有给当前变量赋初始值也就是我们所说的未初始化,也会警告。等等。我们可以使用如下代码来进行屏蔽表示警告的代码

举个例子:

我们需要屏蔽如下警告代码(CS8618)

声明方式:

#pragma warning disable CS8618public S3(){Age = MyProperty;}public ICommand command { get; private set; }public ICommand command2 { get; private set; }public ICommand command22 { get; private set; }
#pragma warning restore CS8618

示例解释:

        当前被包起来的区域将不会抛出警告代码为CS8618的警告内容,如果删除 #pragma warning restore CS8618则代表#pragma warning disable CS8618只下的代码全部取消CS8618的警告。

         CS的含义: C# 的编译器修改了警告标识的规则,如C#的编译器的警告的标准的规则则是警告代码前缀是CS开头

六、固定大小缓存区

        固定大小缓存区这项特性只能用于非安全的代码并且只能用于结构体内部。固定大小缓存区允许你直接访问托管堆栈上的内存,这对于性能敏感的代码特别有用。 

        非安全代码:指的是固定大小缓存区只能在不安全(unsafe)代码中使用。这是因为固定大小缓存区允许你直接操作内存 。

举个例子:

unsafe class Program  
{  static unsafe void Main(string[] args)  {  byte[] buffer = new byte[100];  fixed (byte* pBuffer = buffer)  {  // 在这里,pBuffer指向固定大小的缓冲区  // 你可以使用指针pBuffer进行直接内存操作  }  }  
}

示例解释:

        为什么称呼它为非安全代码示例,因为当前 使用fixed关键字将其固定在内存中。通过指针pBuffer,我们可以直接访问和操作这个固定大小的缓冲区。 因为它直接操作内存。在编写这样的代码时,必须非常小心,以避免出现内存泄漏、悬挂指针等问题。


提示:如果无法编译则需要 在 ‘解决方案资源管理器’ -> 右击 -> 选择 ‘属性’ -> 选择‘生成’ -> 选择 ‘允许不安全代码' 后就可以通过编译了。

        只能在结构体内部使用:固定大小缓存区只能定义在结构体(struct)内部。这是因为结构体在C#中是值类型,其生命周期与栈帧一致,因此能够确保在固定大小缓冲区被释放时,不会发生悬挂指针(dangling pointers)。与之相对,类(class)是引用类型,其生命周期由垃圾回收器管理,因此不能保证在释放内存后不会发生悬挂指针。

七、InternalsVisiblTo

        此项技术我觉得(非本人):.NET 中的 InternalsVisibleTo - 知乎 (zhihu.com)

注意:这个博主可能比我理解更好,我这就不介绍了 

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

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

相关文章

秋招复习之数据结构

目录 前言 1 数据结构分类 2 基本数据类型 3 数字编码 4 字符编码 总结 前言 秋招复习之数据结构,数据结构分类、基本数据类型、字符编码、数字编码等基础知识。 1 数据结构分类 数据结构分为逻辑结构和物理结构。 逻辑结构分为线性数据结构(数组链表…

卷麻了,00后测试用例写的比我还好,简直无地自容...........

经常看到无论是刚入职场的新人,还是工作了一段时间的老人,都会对编写测试用例感到困扰?例如: 如何编写测试用例? 作为一个测试新人,刚开始接触测试,对于怎么写测试用例很是头疼,无法…

私域和微商有什么区别?

私域和微商到底有什么区别呢?其实这两个东西有着本质性区别。 私域: 通过原有商业或者新媒体方式获取粉丝或顾客,然后用微信等社交工具,多方位展现,人格专业。 最终目标是让粉丝或顾客成为品牌或IP的朋友&#xff0…

Ajax基础入门_Ajax概述,同步与异步,Axios的使用,JSON数据及FastJSON的使用

Ajax 文章目录 Ajax1 概述2 作用3 同步和异步3.1 同步3.2 异步 4 代码编写4.1 服务端4.2 客户端 5 Axios5.1 使用5.2 代码5.2.1 前端5.2.2 后端 5.3 请求方法别名 6 JSON6.1 概述6.2 JSON 基础语法6.2.1 定义格式6.2.2 js 对象与JSON的转换 6.3 发送异步请求携带参数6.4 JSON串…

机器学习(四) -- 模型评估(2)

系列文章目录 机器学习(一) -- 概述 机器学习(二) -- 数据预处理(1-3) 机器学习(三) -- 特征工程(1-2) 机器学习(四) -- 模型评估…

数据库——SQL DDLDML使用

1.实验内容及原理 1. 在 Windows 系统中安装 VMWare 虚拟机,在 VMWare 中安装 Ubuntu 系统,并在 Ubuntu 中搭建 LAMP 实验环境。 2. 使用 MySQL 进行一些基本操作: (1)登录 MySQL,在 MySQL 中创建用户,…

云原生架构未来发展趋势,探索容器技术未来的发展趋势

云原生架构未来发展趋势,探索容器技术未来的发展趋势 云原生架构未来发展趋势容器技术发展趋势无处不在的计算催生新一代容器实现深入分布式云(从多云/混合云,到分布式云)云原生操作系统Kubernetes已经成为云时代的操作系统从无状…

直流有刷电机的简单高性能控制方法

提出问题 在STM32——直流电机PI调速一文中推导了直流有刷电机的数学模型,在不考虑电流环的情况下,可做降阶处理,视同一个一阶系统,通过简单的 P I PI PI控制使得电机有着不错的响应,但仍然存在两个问题,一…

网站迁移和SEO:损害排名的常见错误

正在规划站点迁移? 迁移是更困难的 - 通常是可怕的 - SEO任务之一。 为了让它发挥作用,你需要避免常见的陷阱,这些陷阱可能会影响你的知名度,并导致流量和收入的损失。 8 月 11 日,我主持了一场赞助的搜索引擎杂志网…

PD SINK协议芯片系列产品介绍对比-ECP5701、FS312A、CH221K、HUSB238、AS225KL

目录 一、 ECP5701 二、 FS312A 三、 CH221K 四、 HUSB238 五、 AS225KL 在如今快节奏生活不断蔓延的背景下,人们对各种事情的处理也渐渐地开始要求在保证质量的情况下,不断加快。手机快充就是一个典型的例子,从开始的18W,30…

linux usb 驱动介绍

通用串行总线(USB)是一个在主机和许多外设之间的连接. 最初它被创建来替代许多慢速和不同的总线- 并口, 串口, 和键盘连接--有一个单个的所有设备都可以连接的总线类型. [45] USB 已经成长超出了这些 慢速连接并且现在支持几乎每种可以连接到 PC 的设备. USB 规范的最新版本增加…

并行算法举例

谷歌的三大马车中的两辆分别是MapReduce GFS 这些我们在后边都会学到。 补充shuffle的作用 将map中的内容,具备相同内容的key被放到一组 问题1 矩阵乘法 第一轮j相同放在一起。 第二轮ik相同的放在一起。 问题2 求和问题 问题3 不重复元素

【机器学习基础】DBSCAN

🚀个人主页:为梦而生~ 关注我一起学习吧! 💡专栏:机器学习 欢迎订阅!相对完整的机器学习基础教学! ⭐特别提醒:针对机器学习,特别开始专栏:机器学习python实战…

C++_string类

目录 一、string的模拟实现 1、初始化字符串 2、拷贝构造 3、赋值重载 4、迭代器 5、比较字符串 6、尾插字符、字符串 7、resize 8、中间插入数据、删除数据 8.1 插入数据 8.2 删除数据 9、查找数据 10、打印对象(流插入、流提取) 结语&a…

centos7部署minio单机版

一、目标 在centos7上部署minio单机版 二、centos7部署minio 1、下载minio mkdir /usr/local/minio cd /usr/local/minio wget https://dl.minio.io/server/minio/release/linux-amd64/minio chmod x minio 2、新建minio存储数据的目录 mkdir -p /data/minio/data3、新建…

ASP.NETCore WebAPI 入门 杨中科

ASP.NETCore WebAPI入门1 回顾 mvc开发模式 前端代码和后端代码是混在一个项目之中 WEB API 1、什么是结构化的Http接口。Json。 2、Web API项目的搭建。 3、Web API项目没有Views文件夹。 4、运行项目,解读代码结构。 5、【启用OpenAPI支持】→>swagger,在界…

Spring的IOC解决程序耦合

目录 1.配置项目 1.1配置pom.xml 1.2Spring常用功能的Jar包依赖关系 1.3简单代码 2.IOC 2.1.applicationContext.xml 2.2.测试 3.DI 3.1概述 3.2.构造函数注入 3.3set方法注入 3.4自动注入 3.5注入集合类型的属性 1.配置项目 1.1配置pom.xml <?xml version&…

【算法每日一练]-动态规划(保姆级教程 篇14) #三倍经验 #散步 #异或和 #抽奖概率

目录 今日知识点&#xff1a; 金字塔的正反dp两种方案&#xff0c;转移方程取决于dp的具体含义 取模实现循环走m步回到原点的方案 在统计上升子序列的时候使用最小结尾元素进行标记&#xff0c;一举两得 将亏本的概率转换各种情况的方案&#xff0c;然后统计亏本的情况的方…

数字孪生技术详解

在线工具推荐&#xff1a;3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 数字孪生技术正在迅速彻底改变企业的运营方式。借助数字孪生技术&#xff0c…

【Nginx】在线安装与离线安装

目录 1、下载nginx news 1.2、 安装包 2、 在线安装 第一步&#xff0c;安装pcre 第二步&#xff0c;安装openssl 、zlib 、 gcc 依赖 第三步&#xff0c;安装nginx 第四步&#xff0c;关闭防火墙&#xff0c;访问nginx ​编辑 3、 离线安装 第一步 安装pcre 第二步…