当前位置: 首页 > news >正文

C# 3.0 之 Partial Method 的使用

早在 C# 2.0 中,便出现了 Partial ,不过那是的 Partial 只能使用在类上,

也就是分部类,对于分部类,实用之处还是比较多的,

因为 Partial Method 是建立在 Partial Class 的基础之上的,

所以在这里先介绍一下 Partial Class 的使用,

然后再一并介绍 Partial Method ,

对于 Partial Class ,其实也就是将一个类拆分成几个分部类,

并且这些分部类可以写在不同的类文件 .cs 中,

比如在一个.cs 中写完这个 Class 的第一部分,

然后再在另外一个 .cs 中完成这个 Class 的第二部分,

再在另外一个 .cs 中完成这个 Class 的第三部分,

………………..

这个就是分部类了。

接下来看个示例便一清二楚了,

image

由上面的项目视图可以看出,我已经将一个类分成了四个部分,

然后再在 Demo__3 的 Code-Behind 中对这个类进行实例化并且访问,

先来看看各个 Partial Class 中的代码吧(非常简单的)

这个是 Demo__3__Use__PartialMethodOne.cs

public partial class Demo__3__Use__PartialMethod
{
    private string name = "";

    public void MethodOne()
    {
        name += "你来到了 MethodOne 方法<br/>";
    }

    public string GetName()
    {
        MethodOne();
        MethodTwo();
        MethodThree();
        MethodFour();
        return name;
    }
}

这个是 Demo__3__Use__PartialMethodTwo.cs

public partial class Demo__3__Use__PartialMethod
{
    public void MethodTwo()
    {
        name += "你来到了 MethodTwo 方法<br/>";
    }
}

这个是 Demo__3__Use__PartialMethodThree.cs

public partial class Demo__3__Use__PartialMethod
{
    public void MethodThree()
    {
        name += "你来到了 MethodThree 方法<br/>";
    }
}

这个是 Demo__3__Use__PartialMethodFour.cs

public partial class Demo__3__Use__PartialMethod
{
    public void MethodFour()
    {
        name += "你来到了 MethodFour 方法<br/>";
    }
}

然后就只要看一下 Demo__3.aspx 的 Code-Behind 了

using System;

namespace CSharpLanguage
{
    public partial class Demo__3 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Demo__3__Use__PartialMethod partialMethod =
                        new Demo__3__Use__PartialMethod();

            Response.Write(partialMethod.GetName());
        }
    }
}

以上就是整个 Demo 的所有代码了,

再看一下使用 Partial Class 后的结果吧

image

完成了 Partial Class 的解释,那么便开始 Partial Method 了,

事实上,Partial Method 是完全依赖于 Partial Class 实现的,

Partial Method 也就是分部方法了,

分部方法也就是把一个完整的方法拆分成两个部分,

即方法的定义和方法的实现,

然后再进一步的就可以将这两个部分放在不同的.cs中了,

比如我有一个方法,

我在这个分部类中完成这个方法定义,

然后我又在另外的一个分部类中完成这个方法的实现,

这个就是分部方法了,

很明显的,分部方法时依赖于分部类的,

因为你必须在这个分部类中完成前面的方法定义,

再在另外的一个分部类中完成后面的方法实现,

所以,可以很明显的看出,没有 Partial Class 就不可能有 Partial Method ,

不过,从上面介绍 Partial Class 的例子中可以看出,

Partial Class 也是比较容易的,所以 Partial Method 也理所当然不会难了,

下面就来看一个Demo 吧

image

Demo__4__Use__PartialOne.cs

public partial class Demo__4__Use__Partial
{
    private string name = "";
    partial void UseName();
    public string GetName()
    {
        UseName();
        return name;
    }
}

Demo__4__Use__PartialTwo.cs

public partial class Demo__4__Use__Partial
{
    partial void UseName()
    {
        name += "这里使用了 Partial Method 来操纵 name";
    }
}

Demo__4.aspx 的 Code-Behind 中的代码

using System;

namespace CSharpLanguage
{
    public partial class Demo__4 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Demo__4__Use__Partial partialMethod =
                     new Demo__4__Use__Partial();
            Response.Write(partialMethod.GetName());
        }
    }
}

在看一下结果

image

上面虽然是完整的使用了一次 Partial Class 和 Partial Method ,

但是需要注意的是,使用 Partial Method 还是有诸多限制的,

首先是在声明 Partial Method 时,必须使用到关键字 Partial 来声明,

然后就是在使用 Partial Method 时,必须经 Partial Class 才能使用,

然后还有使用 Partial Method 时,其在类中的地位只能是 private ,

即是私有成员,在类外部是无法对 Partial Method 进行访问的,

还有很重要的一点就是 Partial Method 不能够有返回值,也就是只能为 void。

                                                             2010—2—01

相关文章:

  • Linux系统下的DDOS***防范
  • ADO.NET 新特性之SqlBulkCopy
  • 基于OHCI的USB主机 —— USB设备取得设备描述符
  • linux学习小组成立!
  • System.Net.Dns.GetHostByAddress(string) 已经过时
  • 基础——使用视图和存储过程的优缺点
  • Delphi窗体の属性介绍
  • CSS学习系列十一:板式
  • Overload, Override and Overwrite ( copy)
  • 远程桌面连接
  • Bing Maps进阶系列八:在Bing Maps中集成OpenStreetMap地图
  • KiB是什么单位
  • 关注程序员健康之——白天打个盹提高记忆力
  • UML建模之业务处理模型(Business Process Model,BPM)
  • RealView Development Suite 4.0 Professional安装
  • 【面试系列】之二:关于js原型
  • Brief introduction of how to 'Call, Apply and Bind'
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • flask接收请求并推入栈
  • Git的一些常用操作
  • java8 Stream Pipelines 浅析
  • JAVA多线程机制解析-volatilesynchronized
  • nodejs调试方法
  • NSTimer学习笔记
  • oldjun 检测网站的经验
  • php的插入排序,通过双层for循环
  • Python - 闭包Closure
  • SpringBoot 实战 (三) | 配置文件详解
  • 创建一个Struts2项目maven 方式
  • 大型网站性能监测、分析与优化常见问题QA
  • 构建工具 - 收藏集 - 掘金
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 两列自适应布局方案整理
  • 如何编写一个可升级的智能合约
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 软件开发学习的5大技巧,你知道吗?
  • 手机端车牌号码键盘的vue组件
  • 算法-插入排序
  • 自定义函数
  • 走向全栈之MongoDB的使用
  • puppet连载22:define用法
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • ​如何防止网络攻击?
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #Linux(帮助手册)
  • (23)Linux的软硬连接
  • (C语言)球球大作战
  • (pytorch进阶之路)扩散概率模型
  • (接口自动化)Python3操作MySQL数据库
  • (蓝桥杯每日一题)love
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (十三)Flask之特殊装饰器详解