部分类也可以定义部分方法。部分方法在部分类中定义,但没有方法体,在另一个部分类中执行。在这两个部分类中,都要使用partial关键字。
public partial class MyClass
{
partial void MyPartialMethod();
} public partial class MyClass
{
partial void MyPartialMethod()
{
// Method implementation
}
}

部分方法也可以是静态的,但它们总是私有的,且不能有返回值。它们使用的任何参数都不能是out参数,但可以是ref参数。部分方法还不能使用virtual、abstract、override、new、sealed和extern修饰符。

有了这些限制,就不太容易看出部分方法的作用了。实际上,部分方法在编译代码时非常重要,其用法倒并不重要。考虑下面的代码:

public partial class MyClass
{
partial void DoSomethingElse();
public void DoSomething()
{
Console.WriteLine(“DoSomething() execution started.”);
DoSomethingElse();
Console.WriteLine(“DoSomething() execution finished.”);
}
} public partial class MyClass
{
partial void DoSomethingElse()
{
Console.WriteLine(“DoSomethingElse() called.”);
}
}

这段代码定义了部分方法DoSomethingElse,在第一个部分类中定义,在第二个部分类中执行。在控制台应用程序中调用DoSomething时,输出如下所示:

DoSomething() execution started.

DoSomethingElse() called.

DoSomething() execution finished.

如果删除第二个部分类定义,或者删除部分方法的全部执行代码(注释掉代码),输出就如下所示:

DoSomething() execution started.

DoSomething() execution finished.


者可能认为,调用DoSomethingElse时,运行库发现该方法没有执行代码,因此会继续执行下一行代码。但实际上,编译代码时,如果代码包含一个
没有执行代码的部分方法,编译器会完全删除该方法,还会删除对该方法的所有调用。执行代码时,不会检查执行代码,因为没有检查方法的调用。这会略微提高性
能。

与部分类一样,在定制自动生成的代码或设计器创建的代码时,部分方法是很有用的。设计器会声明部分方法,用户根据具体情形选择是否执行它。如果不执行它,就不会影响性能,因为该方法在编译过的代码中不存在。

现在考虑为什么部分方法不能有返回类型。如果可以回答这个问题,就可以确保完全理解了这个主题,我们将此留作练习。

原文链接

C#部分类与部分方法的更多相关文章

  1. ASP.NET中Partial Class部分类

    原文:ASP.NET中Partial Class部分类 如果您在开发项目的公用函数库,用于公用函数库的内容越丰富越好,但这不可能一下子就写好,需要一点一点的积累,这时就可以使用Partial Clas ...

  2. C#编程(十九)----------部分类

    部分类 C#中使用关键字partial把类,结构或结构放在多个文件中.一般情况下,一个类全部驻留在单个文件中.但有时候,多个开发人员需要访问同一个类,或者某种类型的代码生成器生成了一个类的某部分,所以 ...

  3. 【C#小知识】C#中一些易混淆概念总结(二)--------构造函数,this关键字,部分类,枚举 分类: C# 2014-02-03 01:24 1576人阅读 评论(0) 收藏

    目录: [C#小知识]C#中一些易混淆概念总结--------数据类型存储位置,方法调用,out和ref参数的使用 继上篇对一些C#概念问题进行细节的剖析以后,收获颇多.以前,读书的时候,一句话一掠而 ...

  4. Partial Class部分类

    Partial Class,部分类 或者分布类.顾名思义,就是将一个类分成多个部分.比如说:一个类中有3个方法,在VS 2005将该类中3个方法分别存放在3个不同的.cs文件中.这样做的好处:1.一个 ...

  5. c#部分类

    c#提供了一个部分类,它只显示类的一部分,用关键字partical修饰 using System; public partial class Course { public int Id { get; ...

  6. linq to sql用partial扩展属性,创建一个部分类(用于多表连接)

    1.在窗体中创建dataGridView显示表: using System; using System.Collections.Generic; using System.ComponentModel ...

  7. C#核心基础--静态类&部分类

    静态类 用 static 关键字修饰的类叫做静态类,静态类通常用来定义工具类.静态类不能实例化,不能从指定基类继承而来,静态类隐式从 Object 类继承而来.静态类只能包含静态成员和常量,因为常量是 ...

  8. C# 部分类使用partial修饰

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace pati ...

  9. 05.部分类 partial

    namespace _06.部分类 { class Program { static void Main(string[] args) { } } /// <summary> /// 这个 ...

随机推荐

  1. lamp环境搭建(apache安装,mysql安装,php安装)

    1.卸载系统内置的LAMP环境 1)卸载httpd服务(内置Apache) ① 使用rpm指令查询安装的httpd服务 ② 卸载httpd服务 如果出现以上提示,代表系统默认不允许我们卸载软件,使用强 ...

  2. mysql空值排序

    SELECT * FROM lzh_topic_channel_product ORDER BY order_id is null , order_id  其中的ORDER BY order_id i ...

  3. Alpha项目冲刺

    一.团队成员 学号 姓名 211606361 何承华(队长) 211606356 陈宇 211606360 丁培辉 211606333 温志铭 211606343 杨宇潇 211606391 张主强 ...

  4. centos7下载

    http://archive.kernel.org/centos-vault/7.0.1406/isos/x86_64/

  5. selenium_unittest框架,TestCase引用

    新手,纯属个人理解,有问题可以给出建议奥~谢谢. 如以下代码,每一个test的类都是一个测试方法而测试方法必须由test_xxx开头命名,非test开头可能会执行不到,执行顺序如test1,test2 ...

  6. 消息中间件——RabbitMQ

    RabbitMQ介绍 RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性.扩展性.高可用性等方面表现不俗.RabbitM ...

  7. Latex 自定义命令:用于一些特殊单词的显示

    \usepackage{xspace} \newcommand{\ie}{{\emph{i.e.}},\xspace} \newcommand{\viz}{{\emph{viz.}},\xspace} ...

  8. RunTime之类与对象

    我们知道,Objective-C是一门动态语言,它将很多静态语言在编译时期做的事放到了运行时来处理.用C++编写的程序通过编译器直接把函数地址硬编码进入可执行文件:而Objective-C无法通过编译 ...

  9. go连接mysql

    package main import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysq ...

  10. vue 自学笔记(6) axios的使用

    前情提要:axios 的使用 axios是一个ajax 的包,主要在node.js 使用 axios 的官网 https://www.kancloud.cn/yunye/axios/234845 一: ...