局部类

在没有局部类出现之前,我们采用下面方法定义类:

Code
public class App
{
     public void Foo()
     {
         //
     }

public void Bar()
     { 
         //
     }
 }

有了局部类之后,可将上述类拆分成如下两个局部类

Code
public partial class App
{
    public void Foo()
    {
        //
    } 
}

public partial class App
{
    public void Bar()
    {
        //
    }
}

局部类型简介

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

2.局部类型实用于以下两种情况

第一 类型特别大,不宜放在一个类中实现

第二 一个类中的一部分代码是由自动工具生成的代码,不宜与我们编写的代码放到一起

3.局部类型是一个纯语言层的编译处理,不影响任何执行机制,IL在编译时会自动将局部类合称为一个完整的类。

局部类型的限制

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

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

3.使用局部类时,一个类的各个部分必须放在相同的命名空间

4.一个类的各个部分必须被同时编译。换言之,就是C#不允许对一个类的各个部分单独编译。

局部类型的几个注意点

1.关键字partial只有和class、interface与struct放在一起的时候才有关键字的意义。因此partial的引入不会影响代码中现有的名称为partial的变量。

2.局部类型的个数并非必须是两个或两个以上,也可以是单独一个,不过这样做没意义。

3.局部类型的各个部分一般是放在不同的cs文件中的,但是C#也允许放在同一个cs文件中

局部类上应用特性

局部类的特性具有"累加"效应,举例如下:

[Attr1,Attr2("Hello")]

partial class A{......}

[Attr3,Attr2("GoodBye")]

partial class A{......}

相当于如下代码:

[Attr1,Attr2("Hello"),Attr3,Attr2("GoodBye")]

class A{......}

局部类上的访问修饰符

1.一个类型各个部分上的访问保护修饰符必须维持一致

2.如果一个类的某个部分上使用了abstract,那么这个类将被视为抽象类

3.如果一个类的某个部分上使用了sealed,那么这个类将被视为密封类

4.一个类的各个部分不能使用相互矛盾的修饰符,比如一个是abstract,一个是sealed

局部类型的基类和接口

1.一个类的各个部分的基类必须相同。因为C#不允许类的多重继承

2.局部类型上的接口具有"累加"效应,换言之如下代码

partial class A:IA,IB{...}

partial class A:IC{...}

partial class A:IA,IB{...}

等价于

class A:IA,IB,IC{...}

空属类型

空属类型简介

空属类型允许一个值类型具有"空值"意义,从而方便很多场合的运算,如数据库中的空字段。

空属类型本身就是一个值类型

空属类型演示:

int i = 123;

int? x = i; //等价于System.Nullable<int> x = new System.Nullable<int>(i);

double? y = x;

int? z = (int?)y;//空属类型支持强制转换

int? x = null;//同下面是不一样的,注意一下就是了

object obj=null;//表示obj不指向托管堆的任何内存空间,ojb的引用指针为0,即无效指针。

空属类型四则运算

Code
using System;
using System.Collections.Generic;
using System.Text;

namespace Demo2
{
    class Program
    {
        static void Main(string[] args)
        {
            
            int? x = 123;
            int? y = null;

//加法
            int? z0 = x + y;
            Console.WriteLine(string.Format("x+y={0}", z0));

//减法
            int? z1 = x - y;
            Console.WriteLine(string.Format("x-y={0}", z1));

//乘法
            int? z2 = x * y;
            Console.WriteLine(string.Format("x*y={0}", z2));

//除法
            int? z3 = x / y;
            Console.WriteLine(string.Format("x/y={0}", z3));

Console.Read();
        }
    }
}

运算结果

值类型与空属类型下Equals的特点

Code
using System;
using System.Collections.Generic;
using System.Text;

namespace Demo2
{
    class Program
    {
        static void Main(string[] args)
        {
            int i = 10;
            int? x = 10;

//x.Equals(i)的时候其中的i做了隐式转换
            //等价于x.Equals(new System.Nullable<int>(i))
            Console.WriteLine(x.Equals(i));
            Console.Read();
        }
    }
}

演示结果

空属类型的几个注意点

1.空属类型实际上是一个泛型类型System.Nullable<T>。空属类型的基础类型就是泛型类型System.Nullable<T>中的T,其中T必须为值类型。

2.空属类型如果值不为空,可以使用同基础类型相同的运算,如加、减、乘和除操作

3.空属类型的HasValue用来判断空属类型是否为空,如果不为空,则可以通过Value属性获取它的基础类型的值。

静态类

静态类简介

静态类是只包含静态成员的类型,它既不能实例化,也不能被继承。它相当于一个sealed abstract类

静态类演示

static class MyUtility

{

public const int data;

public static void Main()

{...}

}

静态类的几个注意点

静态类不能有实例构造器。

静态类不能有实例成员。

静态类上不能使用sealed和abstract关键字。

静态类默认继承自System.Object类,不能显式的指定任何其他基类。

静态类不能指定任何借口实现。

静态类的成员不能有protected或protected internal访问修饰符。

转载于:https://www.cnblogs.com/jewleo/archive/2009/06/08/06081808_1.html

【整理】C#2.0特性之局部类、空属类型和静态类相关推荐

  1. Redis4.0、5.0、6.0、7.0特性整理(持续更新)

    最近研究研究新版本redis的新特性,网上查了查资料,这里记录一下. 0. Redis的版本迭代和里程碑 Redis从发布至今,已经有十余年的时光了,一直遵循着自己的命名规则: 版本号第二位如果是奇数 ...

  2. C++ 学习笔记之(19) new、delete表达式、RTTI(运行时类型识别)、枚举、类成员指针、嵌套类、局部类、位域、volatile、extern C

    C++ 学习笔记之(19) new.delete表达式.RTTI(运行时类型识别).枚举.类成员指针.嵌套类.局部类.位域.volatile.extern C C++ 学习笔记之(19) new.de ...

  3. 1024 程序员节专题论坛来袭,权威解读 MindSpore、CANN 5.0 特性和 HCIA MDC 开发者认证...

    "授人以鱼不如授人以渔",一句古话中蕴含的发展真理,我们将其套用到如今炽手可热的 AI 领域之上会发现无比适用.2018 年,华为提出了普惠 AI 的概念,降低 AI 开发门槛,让 ...

  4. C++知识点杂记3——局部类、位域、volatile、链接指示、枚举、定位new

    一.局部类 局部类就是定义在函数内部的类,因为作用域只是在函数内部,所以,所有成员定义必须完整,在Qt的源码中有几处使用了局部类,见博客https://blog.csdn.net/Master_Cui ...

  5. .NET Core 2.0 特性介绍和使用指南

    前言 这一篇会比较长,介绍了.NET Core 2.0新特性.工具支持及系统生态,现状及未来计划,可以作为一门技术的概述来读,也可以作为学习路径.提纲来用. 对于.NET Core 2.0的发布介绍, ...

  6. C++模板类嵌套类内部类局部类的区别

    模板类就是将类定义成模板的形式. C++中好像不区分内部类与嵌套类两个名词. 内部类与嵌套类都是指在类中定义类. 局部类是指在函数中定义类. (c++不能在函数中定义函数(python可以).c++在 ...

  7. 【Java 面向对象】基础、Java程序的内存划分、嵌套类(内部类、静态嵌套类)、局部类、接口的升级问题(默认方法、静态方法)、instanceof

    面向对象 对象的内存 复杂对象的内存 对象数组的内存 思考:方法存储在哪里? Java程序的内存划分 this.super 注解(Annotation) 访问控制(Access Control) to ...

  8. Java方法工厂,接口,常用日期类Date面向对象,匿名内部类局部类

    抽象 1抽象类不能生成对象 2类中包含抽象函数,这个类必须声明为抽象类 3抽象类不一定有抽象方法.有抽象方法必须是抽象类 4若全是抽象方法,则为接口 接口 比如 interface action{vo ...

  9. .NET Core 3.0特性初探:C# 8、WPF、Windows Forms、EF Core

    .NET Core的下一个主要版本最近进入了预览阶段,.NET Core 3.0将支持使用Windows Presentation Foundation (WPF).Windows Forms(Win ...

最新文章

  1. 三星 arm9 linux,基于arm9内核三星s3c2410平台下linux四键按键驱动程序
  2. 漫画 | 你看的每一篇Nature论文,都是这样出炉的!
  3. Moved to Google Blogger: hongstudios.blogspot.com
  4. pooled-jms_Hibernate隐藏的宝石:pooled-lo优化器
  5. python实现猜数字小游戏
  6. python pandas csv getitem,访问.csv文件时使用Pandas获取KeyError
  7. OmniGraffle 7 Pro全新推出!V7.18.3(204.9.0)正式版 支持M1
  8. java如何看手机型号,基于JAVA代码 获取手机基本信息(本机号码,SDK版本,系统版本,手机型号)...
  9. html视频标签video旋转播放方向,video视频文件有方向怎么处理?
  10. 电话程控交换机 配置
  11. medini analyze软件下载安装使用试用购买
  12. Photoshop - 高反差保留
  13. chmod 777 修改文件权限
  14. 唱歌发声的基础知识与训练方法
  15. qmc5883磁力计指南针 linux驱动
  16. Linux下使用云笔记及OneNote
  17. 浙江移动物联网应用开放平台(免费使用)
  18. 菜鸟在Linux零碎中安置Oracle 11G
  19. opencv生成单位矩阵
  20. RISC-V架构解析

热门文章

  1. Tomcat启动时日志报 dcom.sun.manager.jmxremote 异常导致无法正常启动使用
  2. div背景图自适应占满
  3. 【Codeforces 1426 D】Non-zero Segments,贪心,前缀和,数组子段统计
  4. Codeforces Round #666 (Div. 2)C - Multiples of Length(错位相减)
  5. C++文本处理造轮子
  6. 共享打印机从网络访问此计算机,win7连接共享打印机时出现,你没有权限访问网络资源...
  7. git 分支管理策略(7)
  8. 批量处理word文件内容_word文档批量处理大师
  9. 证书 vivo_vivo秦飞:真假5G不存在 NSA模式手机未来仍可用
  10. hget如何获取多个value_《深入微服务》之 如何给老婆解释什么是微服务的基础框架SpringBoot?...