局部类

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

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. 技术团队,你欠了一屁股债你造吗?
  2. 关于集体生活和个人生活的思考
  3. oracle 赋值到cmd,CMD操作oracle数据导库过程图解
  4. Dapr + .NET 实战(九)本地调试
  5. JDK 9:模块系统状态的重点
  6. 获取iOS任意线程调用堆栈(二)符号化理论:Mach-o文件结构
  7. php 查看扩展 代码,[扩展推荐] 使用 PHP Insights 在终端查看 PHP 项目代码质量
  8. 软件架构设计_软件架构设计的三个维度,软件架构师需要知道的点,了解一下吧...
  9. Javascript的数组操作(笔记)
  10. mysql 安装后大_Window下MySql 5.6 安装后内存占用很高的问题
  11. Linux中变量$#,$@,$0,$1,$2,$*,$$,$?的含义
  12. A-AUTOバッチ管理ツール(HOLD之后,如何再次启动)
  13. QQ资料清空php源码,[php源码][QQ玫瑰小镇]一键收铲种,php网页版
  14. 学习.net设计规范记录
  15. 自定义getElementByClass
  16. RFID天线—1.阻抗测量方法
  17. 无线射频专题《IEEE 802.11协议讲解4@可调参数,性能与兼容性考虑》
  18. POI Excel设置列宽
  19. 【他山之石】康师傅的本地化策略
  20. 【Lv1-Lesson004】Imperative Sentences

热门文章

  1. Eclipse中修改SVN地址
  2. 禁用行、列、单元格单元格编辑
  3. 赤橙黄绿青蓝紫html颜色,赤橙黄绿青蓝紫,超完整颜色词汇大全
  4. 判断参数大于0_能做条件判断的文本函数
  5. 液晶显示屏的C语言编码,单片机液晶汉字显示c语言程序
  6. Hibernate→ORM、简介、第一个Hibernate实现、核心XML配置、Hibernate执行流程、操作数据库对象session、事务、映射XML配置、单例CRUD、get与load
  7. LeetCode刷题目录
  8. c#endread怎么打印出来_C#中如何打印出整个PANEL的内容?
  9. C++中如何读取一个数的位数_初中数学:近似数和平均数知识点总结及练习
  10. Unity3D基础36:场景自适应与场景切换