C#之十七 局部类型

简介: C#之十七 局部类型

C# 2.0 引入了局部类型的概念来允许我们将一个类、结构或接口分成几个部分放在不同的文件中。

重点

Ø        局部类型的定义及注意点

Ø        局部类型的限制及应用特性

Ø        局部类型的修饰符及基类和接口

预习功课

Ø        局部类型的注意点

           局部类型的限制等

视频课堂https://edu.csdn.net/course/play/7621

局部类型(Partial)的简介

       局部类型允许我们将一个类、结构或接口分成几个部分,分别实现在几个不同的.cs文件中

局部类型适用于以下情况:

(1) 类型特别大,不宜放在一个文件中实现。


(2) 一个类型中的一部分代码为自动化工具生成的代码,不宜与我们自己编写的代码混合在一起。


(3) 需要多人合作编写一个类。 局部类型是一个纯语言层的编译处理,不影响任何执行机制——事实上C#编译器在编译的时候仍会将各个部分的局部类型合并成一个完整的类。  

public partialclass Program  
 {    
static voidMain(string[] args)     
    {    }   
}  
 partial classProgram
{   
      publicvoid Test()    
      {    }   
}

局部的限制

       局部类型只适用于类、接口、结构,不支持委托和枚举。

同一个类型的各个部分必须都有修饰符 partial。

使用局部类型时,一个类型的各个部分必须位于相同的命名空间中。

一个类型的各个部分必须被同时编译。

局部类型的注意点

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

   局部类型的各个部分一般是分开放在几个不同的.cs文件中,但C#编译器允许我们将他们放在同一文件中。

局部类型的应用特性

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


[Attribute1,Attribute2("Hello")]


partial class Class1{}


[Attribute3, Attribute2("Exit")]


partial class Class1{}


相当于


[Attribute1,Attribute2("Hello"), Attribute3, Attribute2("Exit")] classClass1 {}


注:Attribute2属性允许在类上多次使用。

局部类型上的修饰符

一个类型的各个部分上的访问修饰符必须维持一致性。

如果一个类型有一个部分使用了abstr act修饰符,那么整个类都将被视为抽象类。


如果一个类型有一个部分使用了 sealed 修饰符,那么整个类都将被视为密封类。


一个类的各个部分不能使用相互矛盾的修饰符,比如不能在一个部分上使用abstract,又在另一个部分上使用sealed。

局部类型的基类和接口

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


局部类型上的接口具有“累加”效应。


partialclass Class2: Iinterface1, Iinterface2


{}


partialclass Class2: Iinterface3


{}


partial class Class2: Iinterface2


{}


相当于


class Class2:Iinterface1, Iinterface2, Iinterface3 {}

英语词汇

英文                                              中文

Partial                   局部的,部分的

 

小结

 灵活运用局部类型并掌握

目录
相关文章
|
存储 安全 编译器
C# 11.0中的泛型属性:类型安全的新篇章
【1月更文挑战第23天】C# 11.0引入了泛型属性的概念,这一新特性为开发者提供了更高级别的类型安全性和灵活性。本文将详细探讨C# 11.0中泛型属性的工作原理、使用场景以及它们对现有编程模式的改进。通过深入了解泛型属性,开发者将能够编写更加健壮、可维护的代码,并充分利用C#语言的最新发展。
|
JSON C# 数据格式
【Azure Function】C#独立工作模式下参数类型 ServiceBusReceivedMessage 无法正常工作
Cannot convert input parameter 'message' to type 'Azure.Messaging.ServiceBus.ServiceBusReceivedMessage' from type 'System.String'.
354 73
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
261 3
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
414 2
C# 可空类型(Nullable)
C# 单问号 ? 与 双问号 ??
285 12
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
399 0
|
存储 C#
揭秘C#.Net编程秘宝:结构体类型Struct,让你的数据结构秒变高效战斗机,编程界的新星就是你!
【8月更文挑战第4天】在C#编程中,结构体(`struct`)是一种整合多种数据类型的复合数据类型。与类不同,结构体是值类型,意味着数据被直接复制而非引用。这使其适合表示小型、固定的数据结构如点坐标。结构体默认私有成员且不可变,除非明确指定。通过`struct`关键字定义,可以包含字段、构造函数及方法。例如,定义一个表示二维点的结构体,并实现计算距离原点的方法。使用时如同普通类型,可通过实例化并调用其成员。设计时推荐保持结构体不可变以避免副作用,并注意装箱拆箱可能导致的性能影响。掌握结构体有助于构建高效的应用程序。
714 7
|
安全 API C#
C#.Net筑基-类型系统②常见类型--枚举Enum
枚举(enum)是C#中的一种值类型,用于创建一组命名的整数常量。它们基于整数类型(如int、byte等),默认为int。枚举成员可指定值,未指定则从0开始自动递增。默认值为0。枚举可以与整数类型互相转换,并可通过`[Flags]`特性表示位域,支持位操作,用于多选场景。`System.Enum`类提供了如`HasFlag`、`GetName`等方法进行枚举操作。
679 7
|
编译器 C#
C#.Net筑基-类型系统②常见类型 --record是什么类型?
`record`在C#中是一种创建简单、只读数据结构的方式,常用于轻量级数据传输。它本质上是类(默认)或结构体的快捷形式,包含自动生成的属性、`Equals`、`ToString`、解构赋值等方法。记录类型可以继承其他record或接口,但不继承普通类。支持使用`with`语句创建副本。例如,`public record User(string Name, int Age)`会被编译为包含属性、相等比较和`ToString()`等方法的类。记录类型提供了解构赋值和自定义实现,如密封的`sealed`记录,防止子类重写。
455 6
|
存储 C#
C#.Net筑基-类型系统②常见类型--结构体类型Struct
本文介绍了C#中的结构体(struct)是一种用户自定义的值类型,适用于定义简单数据结构。结构体可以有构造函数,能定义字段、属性和方法,但不能有终结器或继承其他类。它们在栈上分配,参数传递为值传递,但在类成员或包含引用类型字段时例外。文章还提到了`readonly struct`和`ref struct`,前者要求所有字段为只读,后者强制结构体存储在栈上,适用于高性能场景,如Span和ReadOnlySpan。
355 6