首页 > 编程语言 >c#局部类

c#局部类

时间:2023-11-03 09:12:58浏览次数:28  
标签:partial c# 局部 修饰符 类型 MyClass 部分 class

partial是局部类型的意思。允许我们将一个类、结构或接口分成几个部分,分别实现在几个不同的.cs文件中。C#编译器在编译的时候仍会将各个部分的局部类型合并成一个完整的类

使用事项

关键字partial是一个上下文关键字,只有和 class、struct、interface 放在一起时才有关键字的含义。因此partial的引入不会影响现有代码中名称为partial的变量

适用于以下情况

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

类型限制

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

累加效应

在局部类型上的特性具有“累加”效应。

[Attribute1, Attribute2("Hello")]
partial class Class1{}

[Attribute3, Attribute2("Exit")]
partial class Class1{}

//相当于
[Attribute1, Attribute2("Hello"), Attribute3, Attribute2("Exit")]
class Class1 {}

基类和接口

一个类型的各个部分上指定的基类必须一致。某个部分可以不指定基类,但如果指定,则必须相同。

partial class Class2: Iinterface1, Iinterface2 {}
partial class Class2: Iinterface3 {}
partial class Class2: Iinterface2 {}

//相当于  
class Class2: Iinterface1, Iinterface2, Iinterface3 {}

局部类型修饰符

  • 一个类型的各个部分上的访问修饰符必须维持一致性。
  • 如果一个类型有一个部分使用了abstract修饰符,那么整个类都将被视为抽象类。
  • 如果一个类型有一个部分使用了 sealed 修饰符,那么整个类都将被视为密封类。
  • 一个类的各个部分不能使用相互矛盾的修饰符,比如不能在一个部分上使用abstract,又在另一个部分上使用sealed。

局部类使用

声明必须使用partial关键字

public partial class MyClass
{
    // class implementation
}

可以像普通类一样使用

MyClass myObject = new MyClass();
myObject.MyMethod();

示例代码:

partial class MyClass
{
    private int myField;

    public void MyMethod()
    {
        Console.WriteLine("MyMethod called.");
    }
}

在另一个文件中,可以使用相同的类名和partial关键字来声明该类的另一个部分:

partial class MyClass
{
    private string myOtherField;

    public void MyOtherMethod()
    {
        Console.WriteLine("MyOtherMethod called.");
    }
}

这两个部分将组合成一个完整的类。

myObject = new MyClass();
myObject.MyMethod();
myObject.MyOtherMethod();

输出:

MyMethod called.
MyOtherMethod called.

标签:partial,c#,局部,修饰符,类型,MyClass,部分,class
From: https://www.cnblogs.com/ouyangkai/p/17806832.html

相关文章

  • C#的Web请求WebClient之https根据验证过程,远程证书无效
    ServicePointManager.ServerCertificateValidationCallback+=(sender,certificate,chain,sslPolicyErrors)=>true;using(WebClientclient=newWebClient()){stringurl="https://api.example.com/data";......
  • CRT & exCRT
    一、CRT1.前置芝士exgcd2.应用范围求解同余方程组:\[\begin{cases}x\equiva_1\modm_1\\x\equiva_2\modm_2\\x\equiva_3\modm_3\\~~~~~~~~~~~~~\vdots\\x\equiva_k\modm_k\end{cases}\]其中\(~m_1,m_2,m_3,\cdots,m_k~\)两两互质3.算法原理考虑构造一组解:记......
  • Rabbitmq消息队列:Publish/Subscribe模式简单应用
    一、生产者packagetest.publish;importcom.rabbitmq.client.Channel;importcom.rabbitmq.client.Connection;importutils.RabbitmqConUtil;publicclassGive{//定义交换机privatefinalstaticStringEXCHANGE="test-publish";publicstati......
  • IO多路复用 select
    目录select函数原型细节select函数原型使用select这种IO多路转接方式需要调用一个同名函数select,这个函数是跨平台的,Linux、Mac、Windows都是支持的。程序猿通过调用这个函数可以委托内核帮助我们检测若干个文件描述符的状态,其实就是检测这些文件描述符对应的读写缓冲区的状态:......
  • AtCoder Beginner Contest(abc) 314
    B-Roulette难度:⭐题目大意有一个猜数字的游戏,有n个人参加,每人都猜了若干个数;最后给出答案数字;在所有猜中数字的人中输出猜数数量最少的人的编号;(可能不止一个);解题思路数据不大,暴力即可;神秘代码#include<bits/stdc++.h>#defineintlonglong#def......
  • [MacOS]Ansible-HelloWorld
    安装pipinstallansible手动创建ansible.cfgsudomkdir/etc/ansible/ansible.cfg查看ansible配置信息ansible--version创建hosts文件cd/etc/ansible/sudotouchhostssudovihosts添加主机IP127.0.0.1ansible是基于ssh协议实现的,所以其配置公私......
  • JavaScript String对象及方法总结
    String对象创建方法: newString()vartxt1=newString("string");vartxt2="string";String对象属性1、constructor:返回对String对象属性创建的函数  返回值:函数的引用,不是函数名:    字符串constructor属性返回 functionString(){[nativecode]}2、......
  • webpack4_CodeSplit——optimization.splitchunks
    目录代码文档树webpack.config.js通过修改entry来达到分割打包文件的目的通过optimization.splitChunks来分离大文件以及重复文件修改entry为单文件,在test.js文件中引入jquery配置optimization.splitchunks多入口情况下的多份大文件重复引入单入口情况下的文件单独打包参考博客代......
  • A. Copil Copac Draws Trees
    A.CopilCopacDrawsTrees题目大意:给出一个树边序列,要求你从1号节点建树,对于每条边只有两个端点中有一个绘制了才可以绘制此边思路:这题思路不难,但以前写图太少,遍历被卡,给每个边按序列编号,dfs如果该边的编号大于上条边\(ans++\)code:intn;vector<pii>a[N];intans[N]=......
  • Linux中使用Docker容器安装mysql,无法直接使用mysql命令?
    1.问题如果你在Docker容器中运行MySQL,你不能在宿主主机上使用mysql--version命令来检查MySQL版本,因为MySQL客户端工具在宿主主机上未安装。2.解释2.1方法一要查看容器内MySQL的版本,你需要进入到容器中执行相应的命令。以下是一种方法:dockerexec-itmysqlmys......