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不允许加入已经编译好的类型

C# partial 局部类型的更多相关文章

  1. 关于C#中Partial局部类型关键字的使用

    虽然之前在做Winform开发时候,经常遇到Partial关键字,但是最近在代码中看到使用Partial将同名类文件写在多个源文件中,因此想要记录下Partial的详细使用. Partial type ...

  2. C#基础--局部类型Partial

    局部类型 原本来在同一个命名(namespace)空间下  是不允许相同的类(class)名存在的  但是partial关键字可以允许在同一个namespace下有想通过的类名存在 写法 下面的两个不 ...

  3. C# 局部类型 Partial

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

  4. Struts2之自定义局部类型转换器、全局类型转换器

    Struts2自定义类型转换器分为局部类型转换器和全局类型转换器 (1)局部类型转换器  如果页面传来一个参数reg.action?birthday=2010-11-12到后台action,然后属性用 ...

  5. C#局部类型partial在定义实体类Model中的应用

    以前一直用继承类的方法,原来还可以这样 //例如:定义一个Person的实体类,用户ID(PersonId),姓名(Name),性别(Sex),年龄(Age),地址(Address),联系方式(Tel ...

  6. Struts2第五篇【类型转换器、全局、局部类型转换器】

    前言 上篇博文已经讲解了,Struts2为我们实现了数据自动封装-由上篇的例子我们可以看出,表单提交过去的数据全都是String类型的,但是经过Struts自动封装,就改成是JavaBean对应成员变 ...

  7. partial(类型)(C# 参考)

    通过分部类型可以定义要拆分到多个文件中的类.结构或接口. 如下: 在 File1.cs 中: namespace PC { partial class A { ; void MethodA() { } ...

  8. 3、C#面向对象:封装、继承、多态、String、集合、文件(下)

    面向对象多态 一.装箱和拆箱 装箱:将值类型转换为引用类型.object o = 1:值类型给引用类型赋值 拆箱:将引用类型转换为值类型.int n = (int)o; 强制转换为值类型 满足条件:两 ...

  9. C#中一些关键字和罕见类

    1.@ 在处理字符串时,那些个字符串转义字符我们可以使用这个,那@就是为解决这个而诞生的,直接让字符串原样输出有木有?什么sql字符串了,还有路径啥了的,统统搞定 string sql = @&quo ...

随机推荐

  1. ios UIWebview本地加载H5网页

    注意两点 1.拖动文件到工程中选择create folder,文件夹为蓝色  --不要让文件参与编译,而只是让文件加入进来 2.加载方式pathforresorth   oftype   indire ...

  2. bzoj1014:[JSOI2008]火星人prefix

    思路:插入.修改操作是splay的模型,然后询问的话就可以二分答案,然后再用splay去判,关键就在于怎么去判断. 可以用字符串hash,splay每个节点维护一个hash域,然后就可以定义一个进制去 ...

  3. 以前写过的ajax基础案例(王欢-huanhuan)

    //load方法的使用   $('#loadBtn').click(function(){    //responseTxt 包含来自请求的结果数据 //statusTxt 包含请求的状态(" ...

  4. linux根目录详解

    ubuntu 文件说明:http://tech.ccidnet.com/art/302/20080118/1347213_1.html/ 根目录  |  |-boot/ 启动文件.所有与系统启动有关的 ...

  5. Linq知识大全

    select的源码public static IEnumerable<TResult> Select<TSource, TResult>(this IEnumerable< ...

  6. css3怎么隐藏dom:4种方法

    1.display:none; 2.position:absolute; left:-99999px; 3.visibility:hidden; 4.opacity:0;

  7. "position:relative"在IE中的Bug

    当子元素过高导致父元素出现滚动条时,它并不会像预期的那样呆在父元素里,而是浮在父元素之上,并且位置不随滚动条的移动而改变.根源就是子元素的"position:relative".目 ...

  8. overflow:hidden真的失效了吗

    项目中常常有同学遇到这样的问题,现象是给元素设置了overflow:hidden,但超出容器的部分并没有被隐藏,难道是设置的hidden失效了吗? 其实看似不合理的现象背后都会有其合理的解释. 我们知 ...

  9. Lighttpd日志打印格式

    检查lighttpd打印的日志时,有些字段意义模糊,就找了个对照说明,备份一下 原文地址:http://redmine.lighttpd.net/projects/1/wiki/Docs_ModAcc ...

  10. CentOS下Redis 2.2.14安装配置详解(转载)

    一. 下载redis最新版本2.2.14 cd /usr/local/src wget –c http://redis.googlecode.com/files/redis-2.2.14.tar.gz ...