C#---第二十: partial修饰类的特性及应用

这篇具有很好参考价值的文章主要介绍了C#---第二十: partial修饰类的特性及应用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

0.知识背景

局部类型适用于以下情况:
  • 类型特别大,不宜放在一个文件中实现。
  • 一个类型中的一部分代码为自动化工具生成的代码,不宜与我们自己编写的代码混合在一起。
  • 需要多人合作编写一个类

局部类型的限制:
  • 局部类型只适用于类、接口、结构,不支持委托和枚举。
  • 同一个类型的各个部分必须都有修饰符 partial。
  • 使用局部类型时,一个类型的各个部分必须位于相同的命名空间中。
  • 一个类型的各个部分必须被同时编译。

局部类型的注意点:
  • 关键字partial是一个上下文关键字,只有和 class、struct、interface 放在一起时才有关键字的含义。因此partial的引入不会影响现有代码中名称为partial的变量。
  • 局部类型的各个部分一般是分开放在几个不同的.cs文件中,但C#编译器允许我们将他们放在同一文件中。


1. 代码结构介绍 & 校验的功能

  • 4个不同目录下面的partial 类,校验是否可以都被调用到不同类中独有的方法(Fun() 、Fun2()、Fun3()、Fun5() )
  • 在一个partial 类(SmallClass)中定义变量int,校验其他类中是否可以调用改变量
    C#---第二十: partial修饰类的特性及应用,C#基础,c#,开发语言,partial,局部类,应用


2.代码部分

AnotherClass.cs


using System.Reflection;

namespace ConsoleDeomAlien.MultiClass
{
    public partial class NormalClass
    {
        private const string name3 = "alien3";

        public void Fun3()
        {
            string methodName = MethodBase.GetCurrentMethod().Name;
            Console.WriteLine($"{className}----{methodName}-----{name3}\n");
        }
    }
}




NormalClass.cs


using System.Reflection;

namespace ConsoleDeomAlien.MultiClass
{
    public partial class NormalClass
    {
        private const string name = "alien";
        string className = MethodBase.GetCurrentMethod().ReflectedType.Name;

        public void Fun()
        {
            string methodName = MethodBase.GetCurrentMethod().Name;
            Console.WriteLine($"{className}----{methodName}-----{name}\n");
            Console.WriteLine($"{className}----{methodName}-----{age}\n");
        }
    }
}




SpecialClass.cs


using System.Reflection;

namespace ConsoleDeomAlien.MultiClass
{
    public partial class NormalClass
    {

        private const string name2 = "alien2";

        public void Fun2()
        {
            string methodName = MethodBase.GetCurrentMethod().Name;
            Console.WriteLine($"{className}----{methodName}-----{name2}\n");
        }
    }
}



SmallClass.cs


using System.Reflection;

namespace ConsoleDeomAlien.MultiClass
{
    public partial class NormalClass
    {
        private const string name5 = "alien5";
        public int age = 18;

        public void Fun5()
        {
            string methodName = MethodBase.GetCurrentMethod().Name;
            Console.WriteLine($"{className}----{methodName}-----{name5}\n");
        }
    }
}



MainClass.cs


using ConsoleDeomAlien.MultiClass;

namespace ConsoleDeomAlien
{
    public class MainMethod
    {
        public static void Main()
        {
            var cc = new NormalClass();
            cc.Fun();
            cc.Fun2();
            cc.Fun3();
            cc.Fun5();
            cc.age = 22;

            Console.WriteLine($"Main ---------{cc.age}");
            Console.ReadKey();
        }
    }
}



3.讲解部分

  • 每个partial 文件可以共享内容、共同组成一个类的前提是,命名空间、类名都一摸一样,如下所示。

namespace ConsoleDeomAlien.MultiClass
{
    public partial class NormalClass
    {
    }
}

  • 只要上面条件符合、发现文件在不同路径下,都可以实现共享机制。

  • 既然这个特殊的大类NormalClass需要多个文件共同维护,那每个文件肯定包含一些独有的方法。但是,只要初始化一次这个类,每个文件中独有的方法都可以被调用到
    C#---第二十: partial修饰类的特性及应用,C#基础,c#,开发语言,partial,局部类,应用

  • 在SmallClass.cs 文件中定义了age 这个变量,但在NormalClass.cs文件中,也同样调用到了这个变量age。且在main方法中修改这个变量之后,这个值也变化了。

  • 每个类中定义的私有变量(private const string name)可供该类中的方法单独使用,方便与其他文件中的变量隔离。这样调用不同的方法,可以获取不同的值了。
    C#---第二十: partial修饰类的特性及应用,C#基础,c#,开发语言,partial,局部类,应用

  • 在NormalClass.cs中定义的变量(string className),可以获取到调用该方法对应的class 名称.且该变量可共其他的partial 文件访问到。


string className = MethodBase.GetCurrentMethod().ReflectedType.Name;

  • 在每个方法中定义的局部变量(methodName),可以获取到该方法的名称,且这种方法名的获取方式,只能在方法中获取,在方法外不能获取到。

string methodName = MethodBase.GetCurrentMethod().Name;



4.最终输出内容

C#---第二十: partial修饰类的特性及应用,C#基础,c#,开发语言,partial,局部类,应用文章来源地址https://www.toymoban.com/news/detail-676577.html

到了这里,关于C#---第二十: partial修饰类的特性及应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【从零开始学习C++ | 第二十一篇】C++新增特性 (上)

    目录  前言: 委托构造函数: 类内初始化: 空指针: 枚举类: 总结:         C++的学习难度大,内容繁多。因此我们要及时掌握C++的各种特性,因此我们更新本篇文章,向大家介绍C++的新增特性。 委托构造函数是指一 个类的构造函数调用另一个类的构造函数,以减少代

    2024年02月13日
    浏览(69)
  • 【从零开始学习C++ | 第二十二篇】C++新增特性(下)

    目录 前言: 类型推导: constexpr: 初始化列表: 基于范围的for循环: 智能指针之unique ptr Lambda表达式: 总结:         本文我们将继续介绍   C++ 11 新增十大特性的剩余六个,如果没有看过介绍前四个特性的小伙伴的可以点进我C++的专栏就可以看到。 类型推导(

    2024年02月14日
    浏览(63)
  • 【SQL开发实战技巧】系列(四十九):Oracle12C常用新特性☞表分区部分索引(Partial Indexes)

    【SQL开发实战技巧】系列(一):关于SQL不得不说的那些事 【SQL开发实战技巧】系列(二):简单单表查询 【SQL开发实战技巧】系列(三):SQL排序的那些事 【SQL开发实战技巧】系列(四):从执行计划讨论UNION ALL与空字符串UNION与OR的使用注意事项 【SQL开发实战技巧】系列

    2024年02月05日
    浏览(43)
  • 学习笔记|串口通信的基础知识|同步/异步|RS232|常见的串口软件的参数|STC32G单片机视频开发教程(冲哥)|第二十集:串口通信基础

    百度百科:串口通信的概念 什么是通信? 例如U盘和电脑,我们电脑需要往U盘存东西,而U盘上只有四个触点,除去一个电源一个地,只剩下两个引脚了。此时我们坑定不能像点亮LED那样单纯的给他两个引脚上输出个高低电平就能写数据了对吧。总不至于输出一个高电平就能

    2024年02月07日
    浏览(65)
  • 【Java基础教程】(二十六)Java新特性篇 · 第六讲:注解——解码程序设计中的元数据利器,用小小的@符里做大大的开发~

    Java 注解(Annotation) 是Java语言中一种元数据形式,它提供了一种在代码中添加元数据的方式。注解为程序员提供了向代码中添加额外信息的能力,这些额外信息可以被编译器、工具或者运行时环境使用。 优点: 提供了一种 更加简洁和可读性强 的代码编写风格; 增强代码的

    2024年02月16日
    浏览(40)
  • ElasticSearch第二十讲 Elasticsearch的优势和应用场景

    Elasticsearch 是一个开源的分布式搜索和分析引擎,构建在 Apache Lucene 基础之上。它提供了一个快速、可扩展和具有强大查询功能的分布式搜索解决方案。Elasticsearch 被广泛应用于各种场景,包括企业搜索、日志和事件数据分析、电商商品搜索和推荐等。 Elasticsearch 的核心概念是

    2024年02月09日
    浏览(52)
  • 深入理解ArkTS:Harmony OS 应用开发语言 TypeScript 的基础语法和关键特性

    Harmony OS应用开发的主力语言ArkTS的前身TS语言的基本语法。通过学习变量的声明和数据类型、条件控制、函数声明、循环迭代等基本知识,并了解内核接口的声明和使用。同时还介绍了模块化开发的概念,提高代码的复用性和开发效率。该对话还涉及了if else和switch条件控制语

    2024年02月04日
    浏览(50)
  • 第二十五章:AI大模型在人工智能助手领域的应用

    人工智能助手(AI Assistant)是一种通过自然语言交互与用户进行对话的软件系统,旨在提供有针对性的信息和服务。AI助手通常使用自然语言处理(NLP)和机器学习技术来理解用户的需求,并提供相应的回答和建议。随着AI技术的发展,AI助手已经成为了人们日常生活中不可或缺的一

    2024年02月21日
    浏览(72)
  • 第二十二章 开发Productions - ObjectScript Productions - 生成警报

    如果发生警报事件,警报会在生产运行时向适用的用户发送通知。目的是提醒系统管理员或服务技术人员存在问题。可以通过电子邮件、文本寻呼机或其他机制发送警报。所有警报还会将消息写入 IRIS 事件日志,类型为警报。 生产警报机制的工作原理如下: 当为 Productions 创

    2024年02月07日
    浏览(87)
  • 【Python入门系列】第二十一篇:Python物联网和传感器应用

    物联网和传感器在现代科技中扮演着重要的角色。物联网是指通过互联网连接各种设备和传感器,实现设备之间的通信和数据交换。传感器则是物联网的核心组成部分,用于感知和采集环境中的各种数据。在这篇文章中,我们将探讨使用Python开发物联网和传感器应用的主题。

    2024年02月15日
    浏览(65)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包