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 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)

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C# 反射的终点:Type,MethodInfo,PropertyInfo,ParameterInfo,Summry

文章目录 前言反射是什么?常用类型操作SummryPropertyInfoMethodInfo无参函数运行 有参函数运行,获取paramterInfo 总结 前言 我之前写了一篇Attribute特性的介绍,成功拿到了Attribute的属性,但是如果把Attribute玩的溜,那就要彻…

关键字:instanceof关键字

在 Java 中,instanceof关键字用于检查一个对象是否是某个特定类或其子类的实例。它的语法如下: 其中,Object是要检查的对象,Class是要检查的类或接口。 instanceof关键字的返回值是一个布尔值,如果对象Object是类Cla…

基于Spring Boot的美妆分享系统:打造个性化推荐、互动社区与智能决策

基于Spring Boot的美妆分享系统:打造个性化推荐、互动社区与智能决策 1. 项目介绍2. 管理员功能2.1 美妆管理2.2 页面管理2.3 链接管理2.4 评论管理2.5 用户管理2.6 公告管理 3. 用户功能3.1 登录注册3.2 分享商品3.3 问答3.4 我的分享3.5 我的收藏夹 4. 创新点4.1 …

【UWB定位源码】工厂企业人员定位系统源码,实现安全区域管控、人员在岗监控、车辆实时轨迹监控

UWB高精度定位系统源码,企业工厂人员定位系统源码 概念: UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。 UWB的主要特…

2023-RunwayML-Gen-2 AI视频生成功能发展历程

RunwayML是一个人工智能工具,它为设计师、艺术家和创意人士提供了一种简单的方式来探索和应用机器学习技术。 RunwayML官方网页地址:Runway - Advancing creativity with artificial intelligence. RunwayML专区RunwayML-喜好儿aigcRunwayML 是一种先进…

Java ArrayList 面试题

Java ArrayList 面试题 文章目录 Java ArrayList 面试题ArrayList源码分析成员变量构造方法ArrayList源码分析面试题-ArrayList listnew ArrayList(10)中的list扩容几次面试题-如何实现数组和List之间的转换 ArrayList源码分析 分析ArrayList源码主要从三个方面去翻阅&#xf…

MySQL数据库索引优化实战

目录 一、前言 二、准备工作 2.1 用户表(TB_USER) 2.2 商品表(TB_SKU) 2.3 订单表(TB_ORDER) 三、实例分析 3.1 索引提升查询性能 3.2 多表查询 3.3 索引失效 四、总结 一、前言 在数据库的应用中,性能优化…

SpringBoot从配置文件中获取属性的方法

方式一:Value 基本类型属性注入,直接在字段上添加Value("\${xxx.xxx}")即可.注意这里用的是$,而不是#,Value注入的属性,一般其他属性没有关联关系。 配置文件 user:name: Manaphya…

【搜索引擎】elastic search核心概念

前言 本文不涉及ES的具体安装下载、操作、集群的内容,这部分内容会放在后面一篇文章中。本文只包含ES的核心理论,看完本文再去学ES的细节会事半功倍。 目录 1.由日志存储引出的问题 2.什么是ES? 3.ES的数据结构 4.ES的核心原理 5.联系作…

高效工具汇总,让学习和办公飞起来

目录 1、寻找论文,效率很高2、学习各类编程的地方 1、寻找论文,效率很高 AMiner,由清华大学计算机科学与技术系的唐杰教授团队开发的一个显著的学术搜索和挖掘系统。系统提供了一整套功能以协助学术研究,包括研究人员档案、专家搜…

MySQL8.0安装教程

Mysql安装教程 1.Mysql下载 进入官网https://www.mysql.com/进行下载: 2.Mysql安装 双击文件进行安装,选择默认安装方式: 这里列出了五种安装类型: Developer Default:默认安装类型;Server only&#x…

性能测试浅谈

早期的性能测试更关注后端服务的处理能力。 一个用户去访问一个页面的请求过程,如上图。 数据传输时间 当你从浏览器输入网址,敲下回车,开始... 真实的用户场景请不要忽视数据传输时间,想想你给远方的朋友写信,信件需…

java基础之String的不可变性

目录 概述 String是如何实现不可变的 String为何设计成不可变的 1.缓存和性能优化 2.安全性 3.线程安全性 4.API设计和预测性能 概述 String类的不可变性意味着一旦创建了一个字符串对象,它的值就不能被修改。 String是如何实现不可变的 查看源码 public …

Django 6 后台与便签

1. 什么是后台管理 后台管理是网页管理员利用网页的后台程序管理和更新网站上网页的内容。各网站里网页内容更新就是通过网站管理员通过后台管理更新的。 2. 创建超级用户 1. python .\manage.py createsuperuser 2. 输入账号密码等信息 Username (leave blank to use syl…

Gromacs make_ndx建组问题

1. 选择特定分子或原子: gmx make_ndx -f input.gro -o output.ndx这将打开交互式界面,您可以在其中选择要包含在索引文件中的分子和原子。按照提示进行操作,选择适当的分组。 2. 手动创建索引文件: 您还可以手动创建一个文本文件…

佳能G3800彩色喷墨多功能一体打印机报5B00错误代码处理方法

5B00错误代码的含义 5B00错误代码是指佳能G3800打印机的“废墨仓已满”。这个废墨仓是打印机内部的一个部件,主要用于收集打印过程中产生的废墨。当废墨仓已满时,打印机就会报5B00错误代码。 佳能G3800彩色喷墨多功能一体打印机报5B00错误代码处理办法 …

【软件测试】接口自动化测试面试题及详细答案

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…

【每天五道题,轻松公务员】Day3:太阳常识

目录 专栏了解 ☞欢迎订阅☜ ★专栏亮点★ ◇专栏作者◇ 太阳常识 题目一 题目二 题目三 题目四 题目五 答案 补充扩展 专栏了解 ☞欢迎订阅☜ 欢迎订阅此专栏:考公务员,必订!https://blog.csdn.net/m0_73787047/category_1254…

ROS 系列学习教程(总目录)

ROSLearning 一、ROS概览 1.1 ROS简介 To be continued… 1.2 ROS安装 Ubuntu 安装 ROS 详细教程(以最后一个ROS1版本Noetic为例) 1.3 ROS Hello World ROS创建工作空间添加包并编译 ROS Hello World 1.4 ROS架构 ROS架构:文件系统 …

人生重开模拟器

前言: 人生重开模拟器是前段时间非常火的一个小游戏,接下来我们将一起学习使用c语言写一个简易版的人生重开模拟器。 网页版游戏: 人生重开模拟器 (ytecn.com) 1.实现一个简化版的人生重开模拟器 (1) 游戏开始的时…