C# 2中的一些小特性

news2025/4/22 3:34:23

一、局部类型

        在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 CS8618
    public 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.coloradmin.cn/o/1356520.html

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

相关文章

【普中开发板】基于51单片机的篮球计分器液晶LCD1602显示( proteus仿真+程序+设计报告+讲解视频)

基于普中开发板51单片机的篮球计分器液晶LCD1602显示 1.主要功能:讲解视频:2.仿真3. 程序代码4. 设计报告5. 设计资料内容清单&&下载链接资料下载链接(可点击): 基于51单片机的篮球计分器液晶LCD1602显示 ( pr…

【水浸传感器】软硬件一体水浸监测整套方案远程监测解决各种环境漏水问题

一、痛点分析 在工业生产中,水浸传感器可以安装在数据中心、半导体厂房、输油管道、车间仓库、变电室等易发生水浸的区域。一旦检测到漏水情况,立即发出信号反馈。然而,水浸传感器分散在各个地点,导致管理不集中、不便捷&#xf…

关于TypeScript Interface你需要知道的10件事

TypeScript接口的10种使用场景——可能只有20%的web开发人员完全掌握它们 TypeScript中的接口是一个非常灵活的概念。除了抽象类的部分行为外,它还经常用于描述“对象的形状”。 必需的属性 在定义接口时,需要使用 interface 关键字: interface Use…

流量困境下,2024年餐饮商家的直播带货生意到底怎么做?

据官方数据显示,截至2023年2月,抖音生活服务餐饮商家直播间数量达到43万,2023年7月,抖音生活服务餐饮行业自播商家数较1月增长134%。可以说,直播带货已经成为餐饮商家的常态化的线上营销模式,也成为各大餐饮…

SwiftUI之深入解析ContentUnavailableView的实战应用

一、基本用法 SwiftUI 引入了新的 ContentUnavailableView 类型,允许在应用程序中展示空状态、错误状态或任何其他内容不可用的状态。那么,如何使用 ContentUnavailableView 引导用户浏览应用程序中的空状态呢?首先看看 ContentUnavailableV…

redis服务迁移数据工具--RDM

一、背景: 在日常的运维工作经常遇见各种数据迁移工作,例如mysql数据库迁移、redis数据库迁移、minio数据迁移等等工作。这里介绍一下redis数据库的迁移过程。 二、迁移思路: redis服务/集群的数据迁移思路是需要新建一个配置、密码一样的re…

NX/UG二次开发—C\C++开发单个DLL支持多版本NX一种方法

1、去除附加包含目录下的NX相关的lib文件: 2、从对应的dll导出ufun函数和NXopen函数: libufun.dll; libufun_cam.dll; libufun_cae.dll; libufun_die.dll; libufun_vdac.dll; libufun_weld.dll; libugopenint.dll; libugopenint_cae.dll; libugopenint_…

感知与认知的碰撞,大模型时代的智能文档处理范式

目录 0 写在前面1 GPT4-V:拓宽文档认知边界2 大语言模型的文档感知缺陷3 大一统文档图像处理范式3.1 像素级OCR任务3.2 OCR大一统模型3.3 长文档理解与应用 4 总结抽奖福利 0 写在前面 由中国图象图形学学会青年工作委员会发起的第十九届中国图象图形学学会青年科学…

Java重修第一天—学习数组

1. 认识数组 建议1.5倍速学习,并且关闭弹幕。 数组的定义:数组是一个容器,用来存储一批同种类型的数据。 下述图:是生成数字数组和字符串数组。 为什么有了变量还需要定义数组呢?为了解决在某些场景下,变…

chromium在中文用户名下无法编译的问题

新电脑没有太注意,起用户名的时候用了中文。 在编译chromium104的代码时,因为环境变量有中文导致编译失败: 因为我的电脑默认是使用gbk编码,而不是utf-8编码。 这个问题有三种解决办法: (一)把…

【Spark精讲】Spark on Hive性能优化

目录 第一章 1.1 集群配置概述 1.2 集群规划概述 第二章 Yarn配置 2.1 Yarn配置说明 yarn.nodemanager.resource.memory-mb yarn.nodemanager.resource.cpu-vcores yarn.scheduler.maximum-allocation-mb yarn.scheduler.minimum-allocation-mb 第三章 Spark的配置说…

在Ubuntu22.04上部署Stable Diffusion

在AI绘画软件领域Stable-Diffusion(简称SD)在开源领域绝对是不二之选,他的插件方式可以让此软件具有更多的功能,开发者社群为此提供了大量免费高质量的外接预训练模型(fine-tune)和插件,并持续维…

深耕汽车检测设备领域,引领行业技术革新

在汽车工业飞速发展的今天,汽车检测技术作为保障车辆安全、提升维修效率的重要手段,日益受到行业内外的高度关注。康士柏汽车检测线设备厂家,作为这一领域的佼佼者,凭借其深厚的技术积累和卓越的产品品质,正引领着行业…

傅里叶级数、傅里叶变换、小波变换、离散余弦变换的理解

目录 1. 傅里叶级数2.傅里叶变换 1. 傅里叶级数 功能:能把任意周期性函数展开成一系列正弦、余弦函数的和。 公式: f ( x ) a 0 2 ∑ n 1 ∞ ( a n cos ⁡ ( 2 π n x T ) b n sin ⁡ ( 2 π n x T ) ) 傅里叶系数 a n 2 T ∫ x 0 x 0 T f ( x )…

即时设计:一键查看设计稿与页面差异,让设计师的工作更便捷高效

设计稿走查 在设计工作中,对设计稿和实际页面进行对比是必不可少的环节。然而,传统的对比方式往往耗时耗力,无法精确测量差异。为了解决这个问题,我们推出了一款强大的工具,它可以通过图片对比,轻松查看设…

【ESP32接入语言大模型之通义千问】

1. 通义千问 讲解视频: ESP32接入语言大模型之通义千问 随着人工智能技术的不断发展,自然语言处理领域也得到了广泛的关注和应用。通义千问由阿里云开发,目标是帮助用户获得准确、有用的信息,解决他们的问题和困惑,也…

Debian12使用Xshell连接失败解决办法详细

1、Debian开启ssh服务 sudo apt update -y sudo apt install ssh2、编辑配置文件 # 安装vim sudo apt install vimvim /etc/ssh/sshd_config3、将#PermitRootLogin prohibit-password的注释去掉,设置为yes 4、将#PasswordAuthentication no的注释去掉,…

爬虫工具(tkinter+scrapy+pyinstaller)

需求介绍输入:关键字文件,每一行数据为一爬取单元。若一行存在多个and关系的关键字 ,则用|隔开处理:爬取访问6个网站的推送,获取推送内容的标题,发布时间,来源,正文第一段&#xff0…

进程和计划任务-------后续(二)

一、进程管理 1.进程启动---------- 前台启动与后台启动 进程需要手动启动 前台启动(运行):通过终端启动,且启动后一直占据终端(影响当先终端的操作) 后台启动:可通过终端启动,但启…

【KingbaseES】实现MySql函数Median

本方法只支持在聚合函数窗口中调用 不支持在GROUP BY中使用,使用plsql写的玩意新能都会稍微差一些 建议使用原生方法修改 CREATE OR REPLACE FUNCTION _final_median(numeric[])RETURNS numeric AS $$SELECT AVG(val)FROM (SELECT valFROM unnest($1) valORDER BY …