C# partial 局部类型

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

时间: 2024-10-08 15:26:15

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

C#基础知识-局部类型Partial

局部类型 原本来在同一个命名(namespace)空间下  是不允许相同的类(class)名存在的  但是partial关键字可以允许在同一个namespace下有想通过的类名存在 用途: 一个类中的类容太多   需要分开写 写法 下面的两个不分类  分别位于两个不同的.cs 文件下 namespace soaoeon { public partial class Person { public int Age { get; set; } } } namespace soaoeon { publ

C#基础—不完整类型(局部类型)

1.为何要引入Partial Type 通常,我们在一个.cs文件中维护一个类,这也是一种一般约定,也算一个良好的编程风格,但是有些时候,这个类或类型非常庞大,这对可读性.维护性来说成了一种约定的限制. 当我们接触过一些 ORM 框架的自动生成代码映射的功能时,会发现,当我们使用工具生成了一些基本机构的代码时,很多类都是 partial 类,这是因为当我们在自动代码生成的基础上修改一些自定义的东西后,当再次auto-code时,自定义的代码就被覆盖了,当然我们通常也可以在框架提供的模板中做一些自

struts2注册局部类型转换器

要想实现自定义转换器,要让需要转换的对象继承DefaultTypeConverter类或者StrutsTypeConverter类,获得一个类型转换器的入口,从而实现开发者自己的类型转换器,完成字符串和自定义复合类型之间的转换. 注册局部类型转换器的几点要求是:1.property文件在命名上必须以Action的类名-conversion.properties的形式命名:2.property文件必须和Action在同一个目录下:3.最后要求在文件中定义对象名(非定义类名)以及对应的转换器的具体路

partial(类型)(C# 参考)

通过分部类型可以定义要拆分到多个文件中的类.结构或接口. 如下: 在 File1.cs 中: namespace PC { partial class A { int num = 0; void MethodA() { } partial void MethodC(); } } 在 File2.cs 中,声明: namespace PC { partial class A { void MethodB() { } partial void MethodC() { } } } 在处理大型项目或自动

覆写、重写、多态

1.父类对象用子类对象来实例化的,那么,这个新对象只继承父类的成员,子类的成员根本没有实例化. ** 编译时已经决定左边对象的类型,右边的类型只要包含右边类就可以. 2.虚方法:virtual 他只能修饰方法的,这个虚方法是包含实现的,虚方法和抽象方法一样也可以用override来覆写. 这种功能是为将来留出了修改这个方法的可能. 3.覆写:override 当用override覆写之后原方法是已经覆盖掉了,所以不能再被执行,这时父类对象用子类对象来实例化时,对象获得不了已经被覆盖掉的原方法,只

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

面向对象多态 一.装箱和拆箱 装箱:将值类型转换为引用类型.object o = 1:值类型给引用类型赋值 拆箱:将引用类型转换为值类型.int n = (int)o; 强制转换为值类型 满足条件:两种类型是否存在继承关系. int n = Convert.ToInt32("12"); 未发生装箱或拆箱 .int存储在栈,string存储在堆 装箱或拆箱会影响程序运行事件. 二.面向对象多态 对象在调用同一个方法的时候表现出来多种状态. 1.虚方法 将父类的方法标记为虚方法使用关键字v

C#面向对象10_异常_正则表达式

异常_正则表达式 异常try-catch 在很多情况下,我们不确定程序是否能够正常运行,尤其是在需要第三方配合时,比如:用户输入.操作文件.连接数据库等等情况下,会有一些不可控的因素导致程序出现错误.因此,我们需要一种机制来处理程序的意外错误,这就是try-catch语句的应用范围了. 语法 try{ //有可能出现错误的代码 } catch(Exception 异常变量) { //对异常进行处理 }finally { //无论是否出现异常都会被执行的代码 } 其中: try用来尝试性的执行可能

Partial(部分方法,局部方法),virtual(虚方法),abstract(抽象方法)

Partial 部分方法顾明思议是方法的一部分,不完整的,在ide编译时候,会将所有部分方法加载到一起统一编译,如果分部方法没有被实现,编译器就不会.对他们进行编译. 局部类型的限制 (1) 局部类型只适用于类.接口.结构,不支持委托和枚举.(2) 同一个类型的各个部分必须都有修饰符 partial.(3) 使用局部类型时,一个类型的各个部分必须位于相同的命名空间中.(4) 一个类型的各个部分必须被同时编译. 3. 局部类型的注意点 (1) 关键字partial是一个上下文关键字,只有和 cla

struts局部、全局类型转换器

第01步:编写bean package com.self.bean; import java.util.Date; public class User { private Date birthday = null; public Date getBirthday() { System.out.println("获得-User:" + birthday); return birthday; } public void setBirthday(Date birthday) { System