博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# partial 局部类型
阅读量:5230 次
发布时间:2019-06-14

本文共 1956 字,大约阅读时间需要 6 分钟。

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

    [Attribute1, Attribute2("Hello")]

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

    相当于

    [Attribute1, Attribute2("Hello"), Attribute3, Attribute2("Exit")]

    class Class1 {}

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

  3. (1) 一个类型的各个部分上的访问修饰符必须维持一致性。
    (2) 如果一个类型有一个部分使用了abstract修饰符,那么整个类都将被视为抽象类。
    (3) 如果一个类型有一个部分使用了 sealed 修饰符,那么整个类都将被视为密封类。
    (4) 一个类的各个部分不能使用相互矛盾的修饰符,比如不能在一个部分上使用abstract,又在另一个部分上使用sealed。
  4. 局部类型的基类和接口:                                                                                                                                                                                     (1) 一个类型的各个部分上指定的基类必须一致。某个部分可以不指定基类,但如果指定,则必须相同。
    (2) 局部类型上的接口具有“累加”效应。

    partial class Class2: Iinterface1, Iinterface2 {}

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

    相当于

    class Class2: Iinterface1, Iinterface2, Iinterface3 {}

  5. 把所有的源代码作为一个类型保存在一个单独的文件里是一个好的编程习惯,但有时候一个类型变得过于庞大以至于这样做成为一个不切实际的约束。此外,编程人员经常使用源代码生成器来产生一个应用程序的初始结构,然后再修改产生的代码。不幸的是,当源代码在将来某个时候再次发布时,已存在的修改就要被覆盖了。

     

    Partial types允许把类,结构和接口打破为多个代码碎片存在不同的源代码文件,以便于简化开发和维护。加之partial types允许机器产生的和用户编写的类型部分分离,这样就可以方便增加工具产生的代码。

     

    Partial,是一个新的类型修饰符,在把一个类型定义在多个部分的时候使用。下面是一个partial class的示例,以两个部分实现。这两个部分可能在两个不同的源代码文件,比如说第一个部分是由一个数据库映射工具产生的,而第二个部分是手工编写的。

    public partial class Customer
    {


        private int id;
        private string name;
        private string address;
        private List<Order> orders;
        public Customer() {

            
        }
    }
    public partial class Customer
    {

        public void SubmitOrder(Order order) {

            orders.Add(order);
        }
        public bool HasOutstandingOrders() {

            return orders.Count > 0;
        }
    }


    当上面的两个部分在一起编译,结果产生的代码就好像这个类是写在一个单元里一样。

     

    public class Customer
    {


        private int id;
        private string name;
        private string address;
        private List<Order> orders;
        public Customer() {

            
        }
        public void SubmitOrder(Order order) {

            orders.Add(order);
        }
        public bool HasOutstandingOrders() {

            return orders.Count > 0;
        }
    }


    一个partial type的所有部分必须在一起编译,这样所有的部分才能在编译的时候整合在一起。特别的是partial types不允许加入已经编译好的类型

转载于:https://www.cnblogs.com/5440yan/p/4941026.html

你可能感兴趣的文章
编写高质量代码改善C#程序的157个建议——建议110:用类来代替enum
查看>>
网卡bond技术
查看>>
UITabbarController的UITabbarItem(例:"我的")点击时,判断是否登录
查看>>
UNIX基础知识之输入和输出
查看>>
【洛谷 P1666】 前缀单词 (Trie)
查看>>
数据库锁机制及乐观锁,悲观锁的并发控制
查看>>
图像处理中双线性插值
查看>>
RobHess的SIFT代码解析之RANSAC
查看>>
03 线程池
查看>>
201771010125王瑜《面向对象程序设计(Java)》第十三周学习总结
查看>>
手机验证码执行流程
查看>>
python 基础 ----- 变量
查看>>
设计模式课程 设计模式精讲 2-2 UML类图讲解
查看>>
Silverlight 的菜单控件。(不是 Toolkit的)
查看>>
:hover 鼠标同时触发两个元素变化
查看>>
go语言学习十三 - 相等性
查看>>
Idea 提交代码到码云(提交到github也大同小异)
查看>>
c#连接excel2007未安装ISAM解决
查看>>
Mono 异步加载数据更新主线程
查看>>
初识lua
查看>>