C#部分类与部分方法
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#部分类与部分方法的更多相关文章
- ASP.NET中Partial Class部分类
原文:ASP.NET中Partial Class部分类 如果您在开发项目的公用函数库,用于公用函数库的内容越丰富越好,但这不可能一下子就写好,需要一点一点的积累,这时就可以使用Partial Clas ...
- C#编程(十九)----------部分类
部分类 C#中使用关键字partial把类,结构或结构放在多个文件中.一般情况下,一个类全部驻留在单个文件中.但有时候,多个开发人员需要访问同一个类,或者某种类型的代码生成器生成了一个类的某部分,所以 ...
- 【C#小知识】C#中一些易混淆概念总结(二)--------构造函数,this关键字,部分类,枚举 分类: C# 2014-02-03 01:24 1576人阅读 评论(0) 收藏
目录: [C#小知识]C#中一些易混淆概念总结--------数据类型存储位置,方法调用,out和ref参数的使用 继上篇对一些C#概念问题进行细节的剖析以后,收获颇多.以前,读书的时候,一句话一掠而 ...
- Partial Class部分类
Partial Class,部分类 或者分布类.顾名思义,就是将一个类分成多个部分.比如说:一个类中有3个方法,在VS 2005将该类中3个方法分别存放在3个不同的.cs文件中.这样做的好处:1.一个 ...
- c#部分类
c#提供了一个部分类,它只显示类的一部分,用关键字partical修饰 using System; public partial class Course { public int Id { get; ...
- linq to sql用partial扩展属性,创建一个部分类(用于多表连接)
1.在窗体中创建dataGridView显示表: using System; using System.Collections.Generic; using System.ComponentModel ...
- C#核心基础--静态类&部分类
静态类 用 static 关键字修饰的类叫做静态类,静态类通常用来定义工具类.静态类不能实例化,不能从指定基类继承而来,静态类隐式从 Object 类继承而来.静态类只能包含静态成员和常量,因为常量是 ...
- C# 部分类使用partial修饰
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace pati ...
- 05.部分类 partial
namespace _06.部分类 { class Program { static void Main(string[] args) { } } /// <summary> /// 这个 ...
随机推荐
- thymeleaf学习笔记:总结
Thymeleaf定义:Thymeleaf is a modern server-side Java template engine for both web and standalone envir ...
- SpringBoot集成redis,使用@Cachexxxx
一.引入相关依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId& ...
- CentOs7安装PHP
来源:https://jingyan.baidu.com/article/2d5afd692df18d85a3e28e4c.html 一.下载源码 1.cd /usr/local/src/ 2. 执行 ...
- Note | 学术论文写作方法和技巧
目录 1. 论文发表流程 2. 确定科研方向 3. 思考问题和解决问题 4. 审稿 5. 论文写作 5.1. 标题 5.2. 摘要 5.3.介绍 5.4. 相关工作 5.5. 段落 5.6. 方法 5 ...
- Apollo配置管理系统使用
- C#实现录音录像录屏源码
以前写过两篇录音和录像的文章(实现语音视频录制.在服务器端录制语音视频),最近有朋友问,如果要实现屏幕录制这样的功能,该怎么做了?实际上录屏的原理跟录音.录像是差不多的,如果了解了我前面两篇文章中介绍 ...
- 解决element-ui upload组件报错 Avoid using non-primitive value as key, use string/number value instead
到底是啥错呢,就是要求你的key必须是string或者number类型 那么解决就是找到这个报错的key(在node_modules/element-ui/lib/element-ui.common. ...
- assembly.xml
[官网地址]:http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html <assembly xmlns=" ...
- Statement与PreparedStatement的区别
Statement与PreparedStatement的区别 PreparedStatement预编译SQL语句,性能好. PreparedStatement无序拼接SQL语句,编程更简单. Pr ...
- JS特效实现微博评论逻辑
实现代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...